web-dev-qa-db-fra.com

java.lang.IllegalAccessError: Réf de classe dans la classe pré-vérifiée résolue pour une implémentation inattendue lors de l'exécution du projet de test?

J'ai implémenté le projet en utilisant une bibliothèque tierce (zxing) après que le projet d'implémentation fonctionne correctement puis après avoir écrit un projet de test pour tester mon projet unitaire.Après avoir exécuté le projet de test, le projet principal, les classes et ses méthodes ne donnent aucun des erreurs mais si une classe de framework zxing est utilizée dans cette méthode du projet principal, obtenir l'erreur ci-dessus au moment de l'exécution n'est pas encore compilée.Veuillez me dire comment résoudre ce problème?

30
ADIT

Vous obtenez cette erreur car une référence de bibliothèque tierce a été ajoutée deux fois. Vous avez ajouté le chemin d'application dans le chemin de génération du projet de test. afin que la référence de bibliothèque soit automatiquement ajoutée au projet de test ". Supprimez toute référence de bibliothèque dans le projet de test sous propriétés-> Android.

FYI, cliquez ici pour une explication détaillée .

32
Dasari

C'est parce que les fichiers jar zxing sont chargés deux fois, vous devez définir la bibliothèque zxing comme "Fourni" (si vous compilez votre code en utilisant Maven) au moment de la compilation, il n'ajoute donc pas la bibliothèque à votre bytecode. de cette façon, vous n'obtiendrez pas l'erreur

11

Malheureusement, la meilleure solution que j'ai vue, c'est d'utiliser un script avec ces lignes de code et d'utiliser Espresso v2.0:

adb Shell setprop dalvik.vm.dexopt-flags v=n,o=v
adb Shell stop installd
adb Shell start installd

Exécutez-le avant de commencer le test. Il est seulement nécessaire de le faire une fois.

8
Jesús Castro

J'ai changé le réglage du projet de test dans Intellij Idea. Accédez à Modules -> Dépendances, puis définissez la portée du projet testé sur "Fourni".

5
Fedor

J'ai eu cette erreur car je travaillais avec la goyave et Espresso contient également de la goyave.

Si vous utilisez Gradle et Android Studio, vous pouvez exclure des packages de la dépendance comme ceci:

androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
   exclude group: 'com.google.guava'
}
4
Janusz

Décochez les pots (dans mon cas, les cartes et le pot des services google play) de l'onglet "Commander et exporter" sous le projet Java dans Eclipse. Mais laissez-les être ajoutés dans l'onglet "Bibliothèques". Cliquez sur OK, nettoyez les projets et construisez maintenant.

3
user3167973

Si vous n'avez pas spécifiquement besoin d'un appareil avec une version API faible (<= 19), vous pouvez laisser des dépendances transitives et créer un émulateur avec une version API supérieure.

Cela se produit uniquement sur les appareils dont l'API est inférieure à Lollipop (API 21). L'exécution de tests sur des émulateurs supérieurs/égaux à l'API 21 s'exécute normalement, sans problème.

2
azizbekian

J'ai parfois cette erreur. Juste le projet build-> clean m'a aidé

1
Volodymyr Machekhin

J'ai cette erreur au niveau api inférieur à 21. Seul le projet build-> rebuild m'a aidé.

0
Cüneyt