J'écris des tests pour le projet Android en ce moment et je ne comprends tout simplement pas pourquoi c'est si pénible! Après une journée entière d’installation, j’ai enfin réussi à le faire fonctionner, mais maintenant, après avoir écrit plusieurs classes de test, Intellij IDEA signifie:
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Java.lang.IllegalAccessError''. Check device logcat for details
Test running failed: Instrumentation run failed due to 'Java.lang.IllegalAccessError'
Les tests que je faisais il y a quelques minutes ne peuvent plus être exécutés. Tenant compte de mon retour au dernier commit où tout était idéal et où je ne changeais aucun réglage, je me demandais simplement pourquoi.
Voici ce que dit logcat:
02-12 20:16:09.398: E/AndroidRuntime(4922): FATAL EXCEPTION: main
02-12 20:16:09.398: E/AndroidRuntime(4922): Java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.view.MenuInflater$MenuState.readItem(MenuInflater.Java:327)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.view.MenuInflater.parseMenu(MenuInflater.Java:147)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.Java:97)
02-12 20:16:09.398: E/AndroidRuntime(4922): at <package>.ui.CheckPasswordActivity.onCreateOptionsMenu(CheckPasswordActivity.Java:130)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.support.v4.app._ActionBarSherlockTrojanHorse.onCreatePanelMenu(_ActionBarSherlockTrojanHorse.Java:45)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.Java:556)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.Java:60)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.Java:154)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.Android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.Java:407)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.Android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.Java:769)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.Android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.Java:201)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:749)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.view.Choreographer.doCallbacks(Choreographer.Java:562)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.view.Choreographer.doFrame(Choreographer.Java:531)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:735)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.os.Handler.handleCallback(Handler.Java:725)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.os.Handler.dispatchMessage(Handler.Java:92)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.os.Looper.loop(Looper.Java:137)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Android.app.ActivityThread.main(ActivityThread.Java:5039)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Java.lang.reflect.Method.invokeNative(Native Method)
02-12 20:16:09.398: E/AndroidRuntime(4922): at Java.lang.reflect.Method.invoke(Method.Java:511)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
02-12 20:16:09.398: E/AndroidRuntime(4922): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
02-12 20:16:09.398: E/AndroidRuntime(4922): at dalvik.system.NativeStart.main(Native Method)
Bien que je n'ai même pas touché à cette classe, la ligne CheckPasswordActivity: 130 à laquelle elle fait référence est simplement:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_check_password, menu);
return true;
}
J'ai enfin trouvé une solution. Le problème était en fait avec les dépendances, on ne sait toujours pas pourquoi cela fonctionnait puis tout à coup a été refusé, mais voici à quoi devraient ressembler les dépendances pour votre module de test:
En résumé, vous devez vous assurer que toutes vos bibliothèques et bibliothèques de projets sont répertoriées pour votre module de test et sont marquées comme "Fournies", à l'exception de Robotium lib, qui est "Compile".
Dans mon cas, cela est dû aux doublons inclus.
Sur la base de votre autre question ... Je pense avoir un peu la même configuration que vous ... Voici à peu près comment mes dépendances sont définies (lisez les sous-éléments comme des dépendances)
Toutes les dépendances sont toutes configurées comme "compiler"
J'utilise ActionBarSherlock à partir du code source et ce module a la case "Est un projet de bibliothèque" cochée.
J'ai juste eu le même problème, essayez de faire ce qui suit pour résoudre le problème.
Supprimez Android-support-v4 lib de votre projet test (ou de toute bibliothèque doublée d'ailleurs). Nettoyez les projets et reconstruisez-le.
Ajoutez la ligne suivante:
manifestmerger.enabled=true
dans votre fichier project.properties de votre projet d'application.
Est-ce que le correctif pour moi :) Eu un projet avec un projet de bibliothèque