ClassNotFoundException: N'a pas trouvé class sur le chemin: DexPathList
j'ai un problème depuis que j'ai mis à jour mon Application sur playstore. Depuis cette mise à jour, l'exception est lancée, mais je n'ai pas changé quoi que ce soit concernant cette exception.
Stacktrace:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
... 10 more
Suppressed: java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
Le truc c'est que, ma version App avant tourne sans problème et je n'ai pas changé quoi que ce soit en rapport avec cette activité. Ive juste d'ajouter un nouveau dialogue info qui n'a rien à voir avec cette activité. Cette application est une version libre de lite, J'ai fait les mêmes changements sur la version pro et là, rien n'est jeté. Cela fonctionne comme prévu. La seule différence entre pro et lite est que J'ai intégré Admob (de la nouvelle manière) dans la version lite et Google Play license dans la version pro. Mais j'ai intégré cela depuis le début et je n'ai pas apporté de changements à cela. Je n'ai pas non plus fait de changements au manifeste, j'ai lu beaucoup de billets ici mais rien n'aide.
Il semble qu'il vient de se passer sur les versions d'Android depuis la version 5.0 . Personne n'a une idée de ce que ce problème pourrait cause ou la personne n'a les mêmes expériences? Est-il possible que proguard ait tout simplement détruit quelque chose en brouillant les pistes (Ici aussi, aucun changement)?
Je n'ai pas posté de code, parce que ce n'est pas important pour ce problème, comme je l'ai dit Je n'ai pas fait de changements liés à cette exception.
cette Question est marquée comme dupliquée mais elle n'est pas. Le commentaire avec le lien ne règle pas mon problème, toutes les bibliothèques sont vérifiées et intégrées de la bonne manière. Aussi, je n'utilise pas NDK.
11 réponses
mise à Jour
Après un long moment, Il s'est avéré qu'il doit avoir quelque chose à voir avec proguard. Je ne peux pas vraiment dire ce que l'erreur provoque exactement, mais j'ai essayé un peu et c'est ce que j'ai remarqué (thats dans mon cas avec Eclipse IDE):
- j'ai pour fermer tous les onglets de la projet de je veux signer
- je dois nettoyer le projet et après le nettoyage, Je ne fais rien d'autre que d'exporter l'apk
- faire un petit changement dans le manifeste, l'enregistrer et annuler le changement (et enregistrer)
- s'il y a une classe dans le manifeste nommée avec "YourClass" ou ".YourClass", changer à "com.yourpackage.yourClass"
ce sont les quatre points que j'ai fait et puis ça a marché. Cela semble suspect, mais je pense qu'il y a un problème avec l'obscurcissement. Parce que sans ces points, je peux simplement compiler mon apk et l'installer à partir d'eclipse. Pour moi, il n'y a pas de raison évidente pour ce comportement. Le nom du paquet fonctionne aussi sans changez si Je ne l'installe qu'à partir d'eclipse. J'espère que ces points peuvent aider quelqu'un.
si le nom du paquet est ok, Si vous clossed le projet, et dans file explorer renommé votre projet mais après en avoir importé un vous rencontrez à nouveau ce problème le seul moyen est ici
SUPPRIMER CE DOSSIER .gradle.
celui-ci peut être trouvé dans le dossier du projet à l'aide de file explorer. Il y a des fichiers d'artefacts qui contiennent le nom de ce vieux projet. Après avoir réouvert le projet dans Android Studio le dossier sera recréé automatiquement.
je viens de changer mon grad de com.Android.outils.construire:gradle:2.2.2 com.Android.outils.construire: gradle: 2.2.0 et le problème, c'est l'amende
pour moi, c'est arrivé quand le nom du paquet (nom du répertoire) a été changé.
j'ai réalisé que le dossier "construire" maintient magiquement des fichiers intermédiaires pour la construction du projet. j'ai supprimé le dossier" build "sous le dossier "app". Maintenant, le Grad doit refaire tous les fichiers avec le nouveau nom de paquet. Maintenant elle fonctionne correctement.
je pense que cela a quelque chose à voir avec multidex et les noms de paquets multiples si vous avez plusieurs modules . Nettoyer le projet et supprimer tous construire/ dossiers.
tl; dr: ceci semble être causé par le mélange de la déclaration relative et absolue dans le AndroidManifest.xml
. Je pense que la meilleure solution est d'utiliser la notation relative lors de la déclaration <application .../>
,<activity .../>
,<receiver .../>
et <service .../>
dans votre AndroidManifest.xml
.
Explication:
j'ai eu ce problème trop longtemps, c'était parce que j'utilisais à la fois absolu et relatif <application .../>
,<activity .../>
,<receiver .../>
et <service .../>
déclarations dans mon AndroidManifest.xml
. Voici ce que j'ai fait pour fix it:
vous AndroidManifest.xml
assurez-vous que le <manifest .../>
section package:
propriété spécifiée correctement, elle devra être le chemin absolu exact, comme suit:
<manifest
package="com.my.absolute.package.path"
xmlns:android="http://schemas.android.com/apk/res/android">...</manifest>
Maintenant que vous avez le bon chemin absolu spécifié dans votre <manifest .../>
section, vous aurez besoin d'utiliser un chemin relatif pour tous <application .../>
,<activity .../>
,<receiver .../>
et <service .../>
's définie dans votre AndroidManifest.xml
.
Exemples:
<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activity.SomeActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:parentActivityName=".activity.ParentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.ParentActivity"/>
</activity>
<activity
android:name=".activity.MyActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:parentActivityName=".activity.ParentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
/>
<receiver
android:name=".receivers.MyReceiver"
android:enabled="true"
android:exported="false">
</receiver>
<service
android:name=".services.MyService"
android:enabled="true"
android:exported="false"
/>
</application>
bien sûr, soyez aussi sûr pour nettoyer votre projet.
parfois, lorsque nous générons un fichier apk signé, si nous avons un problème de bibliothèque de dépendances(bibliothèque jar dupliquée), alors cette erreur peut se produire. Veuillez vérifier le chemin de compilation et supprimer la bibliothèque dupliquée, et vérifier si une bibliothèque n'est pas cochée dans l'onglet commande et exportation.
la raison est, android pas en mesure de trouver l'activité spécifique dans le dexpath.
Donc, nous devons fournir le chemin complet des activités dans "fichier Manifeste".
par exemple votre nom d'activité est "SplashActivity" et c'est là, dans " com.packagename.paquet." Nous devrions donc fournir le nom complet de cette activité.
com.packagename.package.SplashActivity
j'ai eu un problème similaire, voici ma solution:
- changer le nom de l'application dans AndroidManifest en chemin complet
- Nettoyage De Projet
- Projet De Reconstruction
- Build APK
j'ai ajouté
compile "com.android.support:support-core-utils:25.3.1"
compile 'com.android.support:support-v4:25.3.1'
j'ai eu une erreur similaire après avoir changé le nom de mon répertoire en renommant simplement le nom du répertoire et l'importer. Pas en mesure d'installer plus. Ni réactiver le débogage USB ni reconstruire le travail du projet.
je le résous en créant un nouveau projet et en copiant manuellement tout le contenu pertinent dans un nouveau projet.