1

Pourquoi j'obtiens cette erreur sur un standard Android Level 10 API? J'ai créé le plus simple, cas de test le plus court possible, je peux coller l'ensemble projet Android ci-dessous:Cas de test extrêmement simplifié pour UnsatisfiedLinkError sur java.lang.Package.getDeclaredAnnotations

E/AndroidRuntime( 406): java.lang.UnsatisfiedLinkError: getDeclaredAnnotations 
E/AndroidRuntime( 406): at java.lang.Package.getDeclaredAnnotations(Native Method) 
E/AndroidRuntime( 406): at java.lang.Package.getDeclaredAnnotations(Package.java:107) 
E/AndroidRuntime( 406): at com.foobar.android.heartbeat.CustomAppWidgetProvider.onEnabled(CustomAppWidgetProvider.java:15) 
E/AndroidRuntime( 406): at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:73) 

1. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.foobar.android.cannotate" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="10" /> 
    <application> 
     <receiver android:name="com.foobar.android.cannotate.CustomAppWidgetProvider"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/custom_app_widget_provider_info" /> 
     </receiver> 
    </application> 
</manifest> 

2. src/com/foobar/android/cannotate/CustomAppWidgetProvider.java`

package com.foobar.android.heartbeat; 
import java.lang.annotation.Annotation; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.util.Log; 

public class CustomAppWidgetProvider extends AppWidgetProvider { 
    @Override 
    public void onEnabled (Context context) { 
     super.onEnabled(context); 
     Log.d(getClass().getCanonicalName(), "about to get annotations"); 
     Annotation [] annotations = CustomAppWidgetProvider.class.getPackage().getDeclaredAnnotations(); 
     Log.d(getClass().getCanonicalName(), "annotations.length = " + annotations.length); 
    } 
} 

3. res/xml/custom_app_widget_provider_info.xml

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/custom_app_widget" 
    > 
</appwidget-provider> 

4. res/layout/custom_app_widget.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <TextView 
     android:id="@+id/value" 
     android:text="@string/empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</FrameLayout> 

5. res/valeurs/strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="empty">-</string> 
</resources> 

Répondre

1

L'exception que vous voyez est intervenue g car la méthode du code natif pour Package.getDeclaredAnnotations() n'est pas implémentée par le système d'exécution sur la plateforme que vous utilisez.

Selon this android issue, Davlik ne prend actuellement pas en charge les annotations de package. L'exception est un symptôme de cela. Autant que je sache, il n'y a rien que vous puissiez faire, sauf évitez d'utiliser les annotations de paquetages. (Et mobilisez vos amis et vos proches pour qu'ils votent pour que le problème soit résolu!)

+0

Merci. Cela n'arrivera-t-il pas sur Android 4.x compte tenu de la récente correction pour retourner un tableau vide (par votre lien)? S'il vous plaît noter que je ne souhaite pas utiliser les annotations de paquet et je suis heureux si Android retourne un tableau vide. C'est juste le gonflement qui est le problème et je me demande si Android 4.x ne va pas exploser? – necromancer

+0

@agksmehx - Je ne peux pas répondre à la question sur Android 4.x. Mais si vous ne voulez pas vraiment utiliser la méthode, vous devriez peut-être changer le code pour supprimer les appels ... –

+0

c'est une bibliothèque donc il est difficile de supprimer les appels – necromancer