web-dev-qa-db-fra.com

ClassNotFoundException: la classe n'a pas trouvé 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 levée, mais je n’ai rien changé en ce qui concerne cette exception.

Trace de la pile:

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.access$800(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 problème, c’est que ma version d’application s’exécute sans problème auparavant et que je n’ai rien changé en ce qui concerne cette activité. Je viens d'ajouter une nouvelle boîte de dialogue d'informations qui n'a rien à voir avec cette activité. Cette application est une version allégée gratuite, j’ai fait exactement les mêmes modifications sur la version pro et rien n’est jeté. Cela fonctionne comme prévu. La seule différence entre pro et lite est que j’ai intégré Admob (sur le nouveau chemin) dans la version lite et la licence Google Play dans la version pro. Mais c’est ce que j’ai intégré depuis le début et je n’ai apporté aucune modification à cette . Je n’ai également apporté aucune modification au manifeste, j’ai lu de nombreux articles ici mais rien n’aide. 

Il semble que cela se produise sur les versions Android depuis la version 5.0. Quelqu'un a-t-il une idée de ce que ce problème pourrait causer ou a-t-il vécu les mêmes expériences? Est-il possible que proguard ait juste détruit quoi que ce soit en obscurcissant (également ici, aucun changement)?

Je n’ai posté aucun code, car ce n’est pas important pour ce problème, comme je l’ai dit, je n’ai pas apporté de modifications liées à cette exception.

Cette Question est marquée comme étant en double, mais ce n’est pas le cas. Le commentaire avec le lien ne résout pas mon problème, toutes les bibliothèques sont vérifiées et intégrées de la bonne façon. De plus, je n’utilise pas NDK.

28
Opiatefuchs

Mettre à jour

Après un long moment, il s'est avéré que cela devait avoir quelque chose à voir avec proguard. Je ne peux pas vraiment dire exactement ce que l'erreur provoque, mais j'ai essayé un peu et c'est ce que j'ai remarqué (c'est le cas avec Eclipse IDE):

  • Je dois fermer chaque onglet du projet que je veux signer
  • Je dois nettoyer le projet et après le nettoyage, ne rien exporter, mais exporter l'apk
  • faire un petit changement dans le manifeste, sauvegardez-le et annulez le changement (et sauvegardez)
  • s'il existe une classe dans le manifeste portant les noms "YourClass" ou ".YourClass", remplacez-la par "com.yourpackage.yourClass"

Ce sont les quatre points que j'ai faits et puis ça a fonctionné. Cela semble suspect, mais je pense qu’il ya un problème d’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 à ce comportement .. De plus, le nom du paquet fonctionne sans changement si je l'installe uniquement à partir d'Eclipse. J'espère que ces points peuvent aider quelqu'un.

26
Opiatefuchs

Si vous manifestez le nom du paquet est ok, Si vous avez bloqué le projet, et, dans File Explorer, a renommé votre projet mais après l’importation de celui-ci, vous rencontrez à nouveau ce problème le seul moyen ici est de 

SUPPRIMER CE DOSSIER .gradle

Celui-ci se trouve dans le dossier du projet à l'aide de l'explorateur de fichiers . Il contient des fichiers d'artefact contenant le nom de l'ancien projet . Après la réouverture du projet dans Android Studio, le dossier sera automatiquement recréé.

14
CodeToLife

Je viens de changer mon titre de com.Android.tools.build:gradle:2.2.2 à com.Android.tools.build:gradle:2.2.0,et le problème est bon

8
林志文

Pour moi, cela s'est produit lorsque le nom du package (nom du répertoire) a été modifié.

J'ai réalisé que le dossier "build" conserve comme par magie des fichiers intermédiaires pour la construction du projet. J'ai supprimé le dossier "build" sous le dossier "app" . Maintenant, le diplômé devait refaire tous les fichiers avec le nouveau nom du paquet. Maintenant cela fonctionne correctement.

4
HBB20

Je pense que cela a quelque chose à voir avec multidex et plusieurs noms de paquet si vous avez plusieurs modules. Nettoyez le projet et supprimez tous les build/dossiers.

3
Ozzz

tl; dr: Cela semble être dû au mélange des déclarations relatives et absolues dans le AndroidManifest.xml. Je pense que la meilleure solution consiste à utiliser la notation relative lors de la déclaration de <application .../>, <activity .../>, <receiver .../> et <service .../> dans votre AndroidManifest.xml.

Explication complète:

J’avais ce problème pour TOO LONG, c’est parce que j’utilisais les déclarations <application .../>, <activity .../>, <receiver .../> et <service .../> relatives et absolues dans mon AndroidManifest.xml. Voici ce que j'ai fait pour le réparer:

Dans votre AndroidManifest.xml, assurez-vous que la propriété <manifest .../> a sa propriété package: spécifiée correctement. Il doit s'agir du chemin absolu exact, comme suit:

<manifest
    package="com.my.absolute.package.path"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">...</manifest>

Maintenant que le chemin absolu correct est spécifié dans votre section <manifest .../>, vous devez utiliser un chemin relatif pour tous les <application .../>, <activity .../>, <receiver .../> et <service .../> définis 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, veillez également à nettoyer votre projet.

3
Sakiboy

Parfois, lorsque nous générons un fichier apk signé, si nous rencontrons un problème de bibliothèque de dépendances (bibliothèque jar en double), cette erreur peut se produire. Veuillez vérifier le chemin de génération et supprimer la bibliothèque en double, et vérifier si une bibliothèque n’est pas cochée dans l’onglet Ordre et Export.

1
Dhiren

La raison en est qu'Android n'est pas en mesure de trouver l'activité spécifique dans le trajet dexpath.

Nous devrions donc fournir le chemin complet des activités dans le "fichier manifeste".

par exemple, le nom de votre activité est "SplashActivity" et vous le trouverez dans "com.packagename.package". Nous devrions donc fournir le nom complet de cette activité.

com.packagename.package.SplashActivity
1
Kona Suresh

J'ai ajouté 

compile "com.Android.support:support-core-utils:25.3.1"
compile 'com.Android.support:support-v4:25.3.1'
0
SpyZip

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

  1. Changer le nom de l'application dans AndroidManifest en chemin complet
  2. Projet propre
  3. Projet de reconstruction
  4. Construire APK
0
Jaleel Adesina

J'ai eu une erreur similaire après avoir changé mon nom de répertoire en renommant simplement le nom de répertoire et l'importation. Impossible d'installer plus. Ne réactivez pas le débogage USB ni le travail de reconstruction du projet.

Je le résous en créant un nouveau projet et en copiant manuellement tout le contenu pertinent dans le nouveau projet.

0
林果皞