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.

28
demandé sur Opiatefuchs 2015-04-23 10:37:40

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.

25
répondu Opiatefuchs 2015-05-06 11:53:01

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.

14
répondu CodeToLife 2017-06-23 14:46:55

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

8
répondu 林志文 2017-02-15 02:28:22

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.

4
répondu HBB20 2017-05-16 11:16:00

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.

3
répondu Ozzz 2016-07-24 19:29:06

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.

2
répondu Sakiboy 2016-05-19 00:54:59

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.

1
répondu Dhiren 2015-04-23 09:30:54

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
1
répondu Kona Suresh 2016-11-21 14:46:45

j'ai eu un problème similaire, voici ma solution:

  1. changer le nom de l'application dans AndroidManifest en chemin complet
  2. Nettoyage De Projet
  3. Projet De Reconstruction
  4. Build APK
0
répondu Jaleel Adesina 2017-04-09 22:46:26

j'ai ajouté

compile "com.android.support:support-core-utils:25.3.1"
compile 'com.android.support:support-v4:25.3.1'
0
répondu SpyZip 2017-04-18 11:55:38

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.

0
répondu 林果皞 2017-05-02 07:39:26