java.lang.ClassNotFoundException: classe introuvable sur le chemin: dexpathlist

140

Je travaille actuellement sur un projet dans lequel je dois utiliser ndk purement natif. Cela a fonctionné lorsque j'ai essayé d'exécuter un exemple helloworld à partir de la source du moteur Irrlicht. Ensuite, j'essaye de l'utiliser dans mon projet en suivant le même format de cet exemple. Mais j'ai:

03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]

lors de l'exécution de mon projet.

Voici mon fichier main.cpp:

#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}

#fin si

dans Android.mk:

LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json 
LOCAL_SRC_FILES :=  android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl 
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

Et j'ai donné le nom de l'activité dans AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.irrlicht.example1"
    android:versionCode="1"
    android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
        <activity android:name="android.app.POMActivity"
        android:label="HelloWorldMobile1"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:clearTaskOnLaunch="true">
        <meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />                     

Quelle est l'erreur que je fais ici? Je posterai le code complet si nécessaire.

Karthik Sivam
la source
1
Utilisez-vous des fichiers JAR externes?
Siddharth_Vyas
@SiddharthVyas Non, je n'utilise pas de fichiers JAR externes dans ce domaine.
Karthik Sivam
1
Votre application est-elle multi-dexe? Si tel est le cas, cela explique le problème.
IgorGanapolsky
lorsque j'ai fait un apk signé, cette erreur ne s'est pas produite. just debug
j2emanue
Avez-vous trouvé une solution de travail?
Benobab

Réponses:

84

J'ai essayé toutes les options possibles mais le résultat est nul. Enfin, j'ai trouvé une solution correcte qui m'est utile. Allez simplement pour désactiver Instant Run Allez dans Fichier -> Paramètres -> Build, Execution, Deployment -> Instant Run -> Décochez la case pour une exécution instantanée . Exécutez votre application une fois et ce fichier apk fonctionne correctement.

Ashik Abbas
la source
11
C'est la bonne réponse pour Android Studio. Je n'arrive pas à croire qu'Instant Run soit toujours aussi bogué que vous devez l'éteindre pour éviter de mauvaises surprises ...
Ognyan
2
Je cherche cette réponse depuis des jours, voire des semaines! Bien que non critique, cette question est restée dans mon esprit, ne me donnant pas la paix. Jamais pensé que la course instantanée était celle qui déclenchait cela. Mon application fonctionnait bien lorsqu'elle était lancée via adb, mais se bloquait toujours avec l'attente d'exécution de ClassNotFound lors de son installation manuelle via apk.
Răzvan Barbu
5
Ce n'est pas la solution pour moi. J'avais désactivé la course instantanée
Terranologie
Après avoir désactivé les options. Veuillez redémarrer votre studio Android
Ashik Abbas
omg je ne sais pas pourquoi la course instantanée est le coupable mais c'est en effet, merci mec.
KingKongCoder
63

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

  1. Faites un clic droit sur votre projet et sélectionnez Propriétés .
  2. Sélectionnez Java Build Path dans le menu de gauche.
  3. Sélectionnez l' onglet Commander et exporter .
  4. Dans la liste, assurez-vous que les bibliothèques ou fichiers JAR externes que vous avez ajoutés à votre projet sont cochés .
  5. Enfin, nettoyez votre projet et exécutez.

Vous pouvez également vérifier cette réponse.

mnsalim
la source
1
C'est la bonne solution à la question. J'ai testé cela avec mon jeu libgdx avec les mêmes erreurs que ci-dessus. J'ai trouvé ces erreurs en utilisant le journal généré avec mon téléphone (Samsung Galaxy S6). Une fois que j'ai appliqué cette solution, tous mes problèmes ont été résolus.
25
Je ne trouve pas les propriétés du clic droit sur le projet. Peut-être que je suis stupide. :(
Zin Min
12
Je ne trouve pas de propriétés non plus, personne ne sait comment accéder à la page répertoriée
Skyler
9
C'est une solution pour l'IDE Eclipse. Il n'y a pas de fichier «project.properties» par défaut dans Android Studio. Il peut être créé cependant.
Bot
La solution fournie n'est applicable que pour Eclipse IDE.
mnsalim
47

Cela semble être un problème dans votre cas. Le chemin relatif de votre activité dans le manifeste n'est pas correct:

<activity android:name="android.app.POMActivity"

remplacez-le par:

<activity android:name=".POMActivity"

ou

<activity android:name="com.irrlicht.example1.POMActivity"
Sushil
la source
31

La suppression de l'application sur l'appareil et le nettoyage du projet fonctionnent pour moi

Vlad
la source
2
Cela a fonctionné pour moi aussi avec React Native. J'ai ouvert le dossier Android avec Android Studio, puis j'ai construit -> nettoyer le projet. Reconstruit avecreact-native run-android
pinguinos
J'ai fait la même chose que le commentaire ci-dessus et cela a fonctionné! Merci !
Elegya
24

Je devrais comprendre le problème en voyant

erreurs dex

Mais il a fallu une demi-journée pour résoudre le problème.
Je corrige cela en suivant les instructions de la page des développeurs Android: https://developer.android.com/studio/build/multidex.html

Ajoutez d'abord ceci au fichier gradle.build:

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'
 }

Ensuite, étendez la classe Application avec la MultiDexApplicationclasse comme indiqué sur le lien ci-dessus (ou déclarez la classe d'application dans AndroidManifest.xmlou remplacez la attachBaseContext()fonction s'il n'est pas possible d'étendre la classe d'application).

C'est tout et cela a résolu le problème.

Akash Bisariya
la source
1
L'ajout de multi-dex n'est utile que lorsque vous dépassez la limite du nombre de références (56k), et il est très instable et très peu fiable avant Lollipop. Cela devrait être utilisé pour résoudre les problèmes en dernier recours.
milosmns
alors quelle devrait être la solution selon vous
Akash Bisariya
Je dis simplement que le multi-dex cause plus de problèmes qu'il n'aide, ce qui est clairement indiqué sur le site Web du développeur. Je ne serais pas là pour chercher une réponse si j'en avais une, n'est-ce pas?
milosmns
1
Ok merci pour l'info, veuillez mettre à jour ici si vous trouvez une bonne solution, ce serait d'une grande aide.
Akash Bisariya
2
L'ajout de la ligne dans les dépendances ci-dessus l'a fait pour moi.
gadildafissh
23

Essayez simplement Clean Project & Rebuild Project .

Nicolas Asinovich
la source
1
Sous le menu "Construire". Sélectionnez Build -> Clean Project , puis Build -> Rebuild Project
kangkyu
Cela impliquerait que l'application ne plante que localement, mais que le crash se produit également dans une version commerciale, ce n'est donc pas vraiment une solution.
David le
22

Cette exception peut également se produire lorsque vous avez une vue personnalisée dans votre mise en page comme celle-ci:

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

et vous changez le nom du package de la vue de "com.example" en quelque chose de différent, mais vous oubliez de le changer également dans la mise en page.

petrnohejl
la source
Cela a été utile pour une raison différente. Vérifie ton orthographe. J'avais un nom de classe mal orthographié à l'origine du problème d'origine.
Berry Wing
12

Je l'ai résolu en utilisant: ./gradlew --stopcommande dans le terminal Android Studio. Après avoir exécuté cette commande, nettoyez et reconstruisez le projet.

Ali Gürelli
la source
11
  1. supprimer le dossier bin
  2. changer l'ordre des bibliothèques
  3. nettoyer et reconstruire

travaillé pour moi.

crazyjune
la source
10

Pour tous ceux qui ont activé le multidex, écrivez ceci

à l'intérieur de build.gradle

apply plugin: 'com.android.application'

android {
 defaultConfig {
      multiDexEnabled true
  }
 dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:multidex:1.0.1'
}

écris un cours EnableMultiDexcomme ci-dessous

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }
}

et en AndroidManifest.xmlécrivant ce nom de classe dans la balise Application

 <application
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">
Manohar Reddy
la source
Comment cela enableMultiDexaffecte-t-il? Dans mon cas, cela javaMaxHeapSize "4g"n'a pas aidé.
CoolMind
@CoolMind C'est juste une classe d'application qui s'étend MultiDexApplication. Il est nécessaire si vous souhaitez utiliser multidex
Manohar Reddy
Se mettre d'accord. J'utilise soit MultiDexApplicationou attachBaseContext(voir developer.android.com/studio/build/multidex ).
CoolMind
8

J'ai rencontré ce problème plusieurs fois et ils sont tous résolus en désactivant Instant Run .

Mohamed Nageh
la source
J'ai essayé plusieurs solutions, cette petite chose a résolu le problème, incroyable!
FraK
@FraK, la solution la plus notée contient ces conseils. Bien que j'avais déjà décoché Instant Run (plusieurs années, il a apporté de nombreux bugs).
CoolMind
7

Nous n'avons pas besoin d'avoir une classe Application personnalisée qui étend MultiDexApplication . Au lieu de cela, nous pouvons avoir comme ça sur AndroidManifest.xml

<application
android:name="android.support.multidex.MultiDexApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

Et avec cela sur build.gradle (Module: app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

Merci.

Abdul Gaffar
la source
Changer le nom de l'application a fonctionné pour moi lorsque j'essayais d'exécuter l'application sur Android 4.3
h8pathak
6

Lorsque vous utilisez multidex, essayez d'étendre votre classe d'application avec MultiDexAppication au lieu de Application et remplacez la méthode ci-dessous requise pour Android inférieur à 5.0 (car 5.0 et supérieur prennent en charge le multidex)

@Override
protected void attachBaseContext(Context base)
{
    super.attachBaseContext(base);
    MultiDex.install(BaseApplication.this);
}

et dans les dépendances, ajoutez ceci

compile 'com.android.support:multidex:1.0.1'
kabore abdoul mohamine
la source
Nous devrions remplacer cette méthode si nous étendons de Application. Pourquoi devrions-nous passer outre dans un cas de MultiDexAppication?
CoolMind
4

Changez simplement le nom de votre dossier de libà libs,

Ensuite, vous verrez des marques d'erreur dans votre projet, pour résoudre ce droit, cliquez sur projet>

Properties > Java Build Path > libraries :

Retirez toute la bibliothèque avec des marques rouges sur elle, puis apply > ok >après nettoyage de votre projet . TADA voit la magie :)

Hemantsb
la source
le nom du dossier est libs uniquement
Killer
4

Dans mon cas, ce problème est survenu à cause de Kotlin. Dans mon code existant, il y avait une classe qui était écrite Kotlin. J'ai construit l'application, elle l'a installée et dès que la première activité a ouvert l'application s'est plantée. dans le logcat, cette erreur était affichée. J'ai ensuite mis à jour ma version Kotlin à partir du site Web de Kotlin dans le fichier gradle de l'application. Reconstruisez l'application et cela a bien fonctionné alors.

Harry .Naeem
la source
Wow, j'ai un projet à 99% -Kotlin Que faire? :)
CoolMind
Pouvez-vous s'il vous plaît vérifier, avec la version Kotlin est compatible avec votre studio Android sous-jacent. C'est juste une supposition. jetez un oeil
Harry .Naeem
J'ai AS 3.3.1 et Kotlin 1.3.21. Ils sont les plus récents. Désolé, je suppose que toutes les solutions décrites ci-dessus et ci-dessous ne sont pas adaptées à ma situation.
CoolMind
4

Une raison possible serait le chemin incorrect de l'activité dans le fichier Apps AndroidManifest.xml. Enregistrez l'activité avec dans votre AndroidManifest.xml avec le chemin relatif complet comme ci-dessous.

<activity android:name="<full_path>.ActivityName" />
Akki
la source
3

après avoir essayé les réponses données, j'ai découvert une autre raison pour la même exception, que je devais ajouter la bibliothèque que j'utilise manuellement à ma bibliothèque principale via

Right click on my main library > 
Properties > 
Android > 
Go to the very bottom of the screen and click (Add) > 
Select my other library that caused the crash >
Apply

avant cette solution, j'ai utilisé le "Fix Project setup" à partir du fichier .java dans eclipse, mais cela ne fonctionnait pas, j'ai donc dû l'ajouter manuellement ici et cela a fonctionné

Ahmed Adel Ismail
la source
3

Je n'obtenais ce crash que sur les appareils Samsung Lollipop et cette solution a fonctionné pour moi.

dexOptions {
     preDexLibraries false
}

Je publie cette réponse ici car cette question est actuellement le résultat de recherche le mieux classé sur Google pour ce crash et aucune des réponses ci-dessus n'a fonctionné pour moi.

cligner des yeux
la source
Cela ne m'a pas aidé (Samsung Galaxy S4, Android 5.0.1).
CoolMind
2

La solution suivante a fonctionné pour moi ...

J'ai essayé tout ce qui est mentionné ci-dessus mais je n'ai toujours pas lancé mon application. J'ai une application native de réaction fonctionnant sur la dernière version de gradle 4+ et Android Studio.

J'ai eu le problème où si je lance react-native run-android, il échouait avec un problème disant qu'il ne pouvait pas trouver la classe MainApplication ... c'est-à-dire ClassNotFoundException

J'ai pu résoudre le problème lorsque j'ai mis à jour mon gradle.properties pour utiliser le compilateur D8.

J'ai ajouté:

android.enableD8 = true

à mon gradle.properties

Détails du document ici: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

nkadu1
la source
1
L'Android Studio 3.1+ utilise ce complicateur dex par défaut
Lennon Spirlandelli
2

La réponse d' Ashik abbas (désactiver Instant Run ) fonctionne pour moi, mais j'ai besoin d' Instant Run , enfin j'ai trouvé une solution qui m'est utile. désactivez simplement minifyEnabled . allez dans build.gradle (Module: app) dans le bloc de débogage et désactivez minifyEnabled :

debug {
            minifyEnabled false

        }
hofs
la source
1

Selon ce que je comprends, je reçois le problème après la mise à jour d'Android Studio 2.1 à 2.3 en raison de la fonctionnalité instantanée, mon application ne fonctionnera pas lorsque je copie l'apk de la sortie et la place dans la carte SD. Pour ce problème, je construis l'apk à partir de l'option de construction, je construis l'apk dans Android Studio.


la source
1

Si vous êtes activé minifyEnabledet shrinkResourcesvrai dans votre fichier de gradation d'application. Vous devez ajouter la ligne suivante dans le proguard-rules.profichier

-keep class com.yourpackage_name. ** {*; }

car la minification est supprimée de certaines classes importantes dans notre fichier apk.

Naveen Kumar M
la source
Ce n'est pas une bonne solution car elle exclut tous vos fichiers sources de la réduction des ressources. N'excluez que les fichiers vraiment nécessaires à la place, sinon vous augmentez la taille de votre apk.
Yannick
1

J'ai eu ce problème avant et les commentaires ici ont aidé dans le passé, mais cette fois, ce n'est pas le cas. J'ai vérifié ma configuration proguard et j'ai supprimé les lignes suivantes, puis cela a fonctionné pour que proguard puisse avoir quelque chose à voir avec cette erreur:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers
j2emanue
la source
1

Dans mon cas, j'ai utilisé l'ancienne bibliothèque d'espaces de noms pendant la configuration de mon projet en utilisant androidx one.

La solution a consisté à remplacer le android.support.design.widget.BottomNavigationViewcomposant avec celui de droite pour échapper à la bibliothèque de soutien: com.google.android.material.bottomnavigation.BottomNavigationView.

Andrii Artamonov
la source
1

dans mon cas, j'ai défini l'activité dans Manifest.xmlet j'ai oublié d'en créer activity. J'ai donc créé l'activité et la définir dans manifestet mon erreur résolue!

sana ebadi
la source
0

Pour moi, le problème est apparu après avoir créé un APK signé. Pour résoudre ce problème, j'ai généré un nouveau apk de débogage à l'aide de Run / Build APK. Après cela, Run (cmd + r) fonctionne à nouveau sans cette erreur.

passatgt
la source
0

J'étais confronté au même problème. J'ai tout essayé pendant une journée, mais rien n'a fonctionné. La dépendance à l'origine du problème utilisait un sdk de compilation inférieur, un sdk cible et un sdk min. J'ai créé un module de bibliothèque pour le projet, copié toutes les sources et mis en correspondance les versions sdk avec les versions sdk de l'application. Et finalement cela a fonctionné comme un charme.

PK Gupta
la source
0

J'ai eu la même erreur et certaines réponses m'induisent en erreur sur un problème de débutant. J'ai eu le mauvais package dans mon descripteur de vue personnalisé comme ci-dessous. J'espère que cela aide quelqu'un.

<com.my.app.wrong.package.MyActivity
    android:id="@+id/myActivity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="8dp"
    android:gravity="left" />
lauksas
la source