web-dev-qa-db-fra.com

Android ClassNotFoundException: la classe n'a pas été trouvée sur le chemin

10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: Java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[Zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.os.Looper.loop(Looper.Java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread.main(ActivityThread.Java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Java.lang.reflect.Method.invoke(Method.Java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[Zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.Instrumentation.newActivity(Instrumentation.Java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

Je ne suis pas vraiment sûr de ce qui le cause car il est correctement répertorié dans le manifeste:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.gvg.simid"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="8"
        Android:targetSdkVersion="18" />

    <uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.BLUETOOTH" />
    <uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN" />
    <uses-permission Android:name="Android.permission.CAMERA"/>
    <uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.READ_LOGS" />
    <uses-permission Android:name="Android.permission.READ_OWNER_DATA" />
    <uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
    <uses-permission Android:name="Android.permission.RECORD_AUDIO"/>
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.WRITE_OWNER_DATA" />
    <uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
    <uses-permission Android:name="Android.permission.WAKE_LOCK" />

    <uses-feature Android:name="Android.hardware.usb.Host" />

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name="com.gvg.simid.Login"
            Android:label="@string/app_name" 
            Android:screenOrientation="landscape">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

J'ai également ajouté "Bibliothèques privées Android" pour créer le chemin et je l'ai déplacé en haut de "Ordre et exportation", mais cela m'a quand même donné la même erreur.

EDIT: J'ai complètement reconstruit le projet et je n'ai pas pu reproduire l'erreur. Pas sûr de ce qui le causait.

86
Phito

J'ai eu le même problème pour mon projet. Cela est dû à un conflit dans la version de la bibliothèque de support Android entre mon projet et le projet de bibliothèque que j'ai ajouté à mon projet. Mettez la même version bibliothèque de support Android dans votre projet et les projets de bibliothèque que vous avez inclus et la construction propre ... Tout fonctionnera ...

71
Balaji Dhanasekar

Cette méthode suivante a fonctionné pour moi. Faites un clic droit sur votre project et sélectionnez properties. Le panneau "Propriétés pour" s'ouvrira. Dans le menu de gauche, sélectionnez Java Build Path -> Order and Export . Dans la liste ci-dessous, décochez la case en regard de "Android Dependencies". Enfin clean your project et exécuter.

Esperons que ça marche

32
Chris

Pour ceux d'entre vous qui ont ce problème sur Android Studio, j'ai eu le même problème après une fusion et pour une raison quelconque, il a même persisté après les opérations clean et invalidate cash/restart qui me rendaient fou.

En fin de compte, il peut être corrigé en exécutant Gradle Build une fois à partir de la ligne de commande Exécutez simplement le répertoire suivant du projet:

./gradlew assemble clean
./gradlew assemble

J'espère que cela épargnerait à quelqu'un le temps perdu et la frustration que je devais subir.

11
Iman Akbari

Si vous utilisez Eclipse, essayez Project -> Clean.

9
Danilo Silva

J'ai eu le même problème, cela a fonctionné pour moi 

1) Chemin d’activité complet dans le manifeste à la place du chemin relatif.

2) Supprimez le dossier 'build' et nettoyez le projet.

8
Ram Mehar Deswal

Cela se produit si nous modifions le chemin de construction de l'APP. Cela peut être dans tous les cas l'ajout, la suppression ou la modification de bibliothèques ou le fichier .jar. La meilleure solution consiste à Redémarrez Eclipse.

7
pioneerBhawna

Si vous obtenez cette erreur lors de l'utilisation de la nouvelle fonctionnalité Instant Run dans Android Studio 2.0 et versions ultérieures, il s'agit d'une sorte de bogue de leur côté.
Pour résoudre ce problème, vous devrez arrêter manuellement votre application sur Device/Emulator si elle n’est pas arrêtée, puis dans Android Studio, sélectionnez BuildRebuild Project.
Cliquez ensuite sur le bouton Exécuter ou SHIFT + F1

6
vovahost

Pour ceux qui ont multidex permettre, écrivez ceci

à l'intérieur 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'
}

écrire une classe EnableMultiDex comme 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 dans AndroidManifest.xml écrivez ceci className inside tag 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">
5
Manohar Reddy

Dans mon cas, c’est le processus de minification proguard qui a supprimé certaines classes importantes de mon apk de production.

La solution consistait à éditer le fichier proguard-rules.pro et à ajouter ce qui suit:

-keep class com.someimportant3rdpartypackage.** { *; }
4
BeFree

1) Créer le dossier libs sous la racine du projet 
2) Copiez et collez le fichier jar dans le fichier.
3) Configurer le chemin de construction (Ajouter un fichier jar)
4) Nettoyer et courir

à votre santé :-)

3
dheeran

Si vous utilisez Multidex sur Android 4.4 et versions antérieures, le problème peut être que votre classe d'activité se situe dans le deuxième fichier dex et n'est donc pas détectée par le système Android.

Pour conserver votre classe d'activité dans le fichier dex principal, voir cette page:

https://developer.Android.com/studio/build/multidex.html#keep


Pour rechercher les classes situées dans un fichier dex , utilisez Android Studio.

Il suffit de faire glisser votre apk dans Android Studio. Vous devriez pouvoir voir vos fichiers dex dans l'explorateur d'apk.

Ensuite, sélectionnez le fichier dex pour voir quelles classes sont à l'intérieur.


une autre alternative est dexdump:

Vous pouvez vérifier le contenu de vos fichiers dex contenus dans votre apk en utilisant la commande dexdump qui se trouve dans

Android-sdk/outils de construction/27.0.3/dexdump

Pour les utilisateurs de Windows, voyez ceci outil que j'ai créé pour faciliter le processus.

2
BenBenMushi

J'ai rencontré cette erreur une fois lorsque j'ai défini une classe qui étendait une vue mais faisait référence à cette vue personnalisée dans le fichier de présentation avec un nom incorrect. Au lieu de <com.example.customview/>, j’avais inclus <com.customview/> dans le fichier de présentation XML.

2
Price

Croyez-moi ou non ... j'ai essayé presque chaque réponse trouvée ici sur stackoverflow. Rien ne pourrait aider, jusqu'à ce que je viens de redémarrer la machine. Mon Android Studio fonctionne sur Ubuntu 16.04 LTS.

2
Piotr Miller

J'ai rencontré le même problème et j'ai remarqué que l'exemple de code était placé dans le répertoire "Java" au lieu du répertoire "src" . Après avoir déplacé le code dans src, le problème a été résolu.

Assurez-vous également que le répertoire de l'application est divisé en plusieurs dossiers . /main/com/site/appname/ pas /main/com.site.appname/

J'espère que ça marche ~

2
weiweia

J'ai eu ce problème récemment et j'utilise Android Studio 0.8.4

Le problème était le fait que j'ai décidé de renommer un fichier de présentation de menu XML appelé main.xml.

Faites un clic droit dessus et choisissez Refactor -> Renommer . Avant de le renommer, veillez à décocher"Rechercher dans les commentaires et les chaînes"et appuyez sur Refactor

Étant donné que mon fichier s'appelait initialement 'main', il a renommé les chemins critiques dans app.iml et build.gradle, principalement les noms de fichier Java.srcDirs dans le fichier build.gradle, car le chemin est défini comme 'src/main/Java'.

J'espère que cela aidera toute personne susceptible de rencontrer ce problème.

1
GoranZarkovic

J'ai eu le même problème sous Windows. J'avais renommé le chemin du projet en quelque chose contenant un espace. 

Assurez-vous que le chemin d'accès à votre projet ne contient pas d'espace.

1
Vincent Hubert

J'ai eu ce problème après la mise à niveau à partir de la version 18 . Après la mise à niveau, j'avais les éléments suivants: Project Build Target était 5.01, targetSDKVersion = 21

Mais: Les outils de compilation étaient encore basés sur Android 4.3.1 (18) Ce que j’ai remarqué, c’est que les applications dérivant de leurs activités à partir de ActionBarActivity plantaient avec l’erreur susmentionnée celles qui ne fonctionnaient pas encore.

La solution simple consistait donc à utiliser les derniers Android SDK Build Tools 21.1.2 Au lieu de n'utiliser que ceux d'Android SDK Build Tools 18, qui semble en quelque sorte la valeur par défaut.

Le coupable semble donc être la bibliothèque Appcompat, que j'utilise pour la compatibilité vers l'arrière de la barre Action.

Et un à propos: en utilisant la bibliothèque appcompat, je devais définir/corriger: $SDKInstallDIR$\Android\android-sdk\extras\Android\support\v7\appcompat\project.properties target=Android-21 (recommandé dans un autre article utile et ayant la valeur 19 par défaut))

1
Peter Rudnik

La solution mentionnée ici -> Solution Multidex Issue a fonctionné pour moi. Vous trouverez ci-dessous ce qui doit être ajouté au contexte de l'application:

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

J'ai rencontré le même problème et l'ai résolu en procédant comme suit:

Dans le menu de construction, sélectionnez

1- Projet propre.

2- Construire APK.

1
Aaeb

Juste au cas où quelqu'un ferait face au même problème que moi et ne suggérerait rien. Répondre ici aide.

Pour moi, la cause était que le refactor de studio Android est un buggy ..__ J'ai déplacé une classe interne en dehors d'une classe, qui était une vue et donc Avait également un xml, où le chemin direct était défini. Ce chemin ne sera pas Refactored par studio! Et aucune erreur ne sera jetée. 

J'espère que cela aide n'importe qui. À votre santé.

0
JacksOnF1re

J'ai eu ce problème pendant un bon bout de temps et, comme tout le monde, les réponses ci-dessus ne s'appliquaient pas à mon projet. 

Dans mon projet, j'avais lié un projet à mon projet et il renvoyait ClassDefNotFoundError chaque fois que du code était exécuté pour l'autre projet. 

Donc c'était ma solution. Je suis allé à projeter les propriétés de mon projet et Java Build Path. Appuyez sur l'onglet "Source" et "lien de source" du dossier src de l'autre projet vers mon propre projet et nomme un nouveau dossier "core-src". 

Espère que cette solution aide quelqu'un

0
user3906863

Je viens de redémarrer l'appareil et d'exécuter l'application. Cela a fonctionné sans aucun problème. J'espère que ça aide quelqu'un :)

0
Kameswari

J'ai trouvé cette erreur dans Android Studio quand j'ai essayé de déboguer dans un périphérique avec API 23 , j'ai donc vérifié le Studio Android et j'ai remarqué que je n'avais pas installé cette version d'API 23. Après l'installation, j'ai résolu le problème.

0
Rodrigo Celebrone

Java.lang.RuntimeException: impossible d'instancier l'application com.Android.tools.fd.runtime.BootstrapApplication: Java.lang.ClassNotFoundException: la classe "com.Android.tools.fd.runtime.BootstrapApplication" est introuvable:/data/app.apk (sous Android 4.3, 4.1)

Impossible d'instancier l'application com.Android.tools.fd.runtime.BootstrapApplication: Java.lang.ClassNotFoundException: com.Android.tools.fd.runtime.BootstrapApplication (ci-dessous, Lollipop iam faisant face à cette erreur)

Pour désactiver Instant Run, les étapes ci-dessous permettent de désactiver l'exécution instantanée dans Android Studio 1. Allez dans Paramètres de fichier -> Construire, Exécution, Déploiement -> Exécution instantanée ---> décocher "Activer l'exécution instantanée"

0
Kishore Reddy

Si vous avez ajouté un nouveau Library Project en tant que module à votre projet Android et que vous utilisez Kotlin dans votre bibliothèque n'oubliez pas d'ajouter  

apply plugin: 'kotlin-Android'

haut du fichier de classement de votre module. Android Studio n'ajoute pas cette ligne lorsque vous avez créé un nouveau module, ce qui pourrait vous faire perdre des heures comme moi.

0
savepopulation

Dans notre cas, nous voulions compiler la version de Vagrant et avions la même erreur. Nous l'avons corrigé par clean project et rebuild project dans le menu Construire

0
Rafael

J'ai eu ce problème plusieurs fois et souvent, je ne faisais manifestement pas d'erreur avec les dépendances. 

C'est toujours une bonne idée de vérifier si cette classe 'non trouvé' est présente dans l'apk final. Si c'est le cas, comme c'est arrivé dans mes cas, le problème est généralement le suivant:

Ce n'est pas que la classe donnée est introuvable, mais il ne peut pas être chargé car sa super classe est manquante.  

Vérifiez si la classe que vous étendez est disponible, puis essayez de corriger votre script de construction ou vos dépendances en conséquence.

0
michalbrz

J'ai eu ce problème, causé par plusieurs causes, mais je le vois dans votre pile "**Unable to instantiate activity ComponentInfo{...}: Java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**", j'ai trouvé une différence dans mon .classpath avant qu'il ne fonctionne plus.

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.Android.ide.Eclipse.adt.Android_FRAMEWORK"/>
    <classpathentry kind="con" path="com.Android.ide.Eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

J'ai ajouté la ligne: 

<classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.DEPENDENCIES"/>

c'est la version finale:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.Android.ide.Eclipse.adt.Android_FRAMEWORK"/>
    <classpathentry kind="con" path="com.Android.ide.Eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Maintenant ça marche! =)

0
Elenasys

J'ai eu exactement le même problème. Comme @weiweia l'a suggéré, déplacer le code du répertoire Java vers src a fonctionné pour moi. J'ai également supprimé les dépendances Android de Projet -> Propriétés -> Chemin de construction Java -> Ordre et exportation, en veillant uniquement à inclure les projets de bibliothèque dans l'écran Android. 

0
bran.io

J'ai rencontré le même problème. Je l'ai résolu en supprimant d'abord le dossier de construction de votre dossier de projet Android et le dossier de construction de votre dossier d'applications . Puis nettoyez votre projet et la construction.

0
Deepak PK

J'ai eu le même problème. J'utilise Xamarin.Android.

Le problème dans mon cas était que j'ai changé le code de version et le nom de version.

Je n'ai eu aucun problème quand je les ai installés comme ceci:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="pac.ka.ge" Android:versionCode="1" Android:versionName="1.0" Android:installLocation="auto">

Le problème est apparu lorsque je l'ai changé en ceci (versionCode 2 et versionName 0.0.1):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package=" pac.ka.ge " Android:versionCode="2" Android:versionName="0.0.1" Android:installLocation="auto">

J'ai résolu le problème en passant à versionCode 2 et versionName 1.0.0.1, comme suit:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package=" pac.ka.ge " Android:versionCode="2" Android:versionName="1.0.0.1" Android:installLocation="auto">

Je ne sais pas pourquoi c'était un problème, peut-être qu'Android n'aime pas un nom de version inférieur avec un code de version supérieur?

J'ai trouvé ce qui suit sur http://developer.Android.com/guide/topics/manifest/manifest-element.html#vname

Android: versionCode Un numéro de version interne. Ce numéro sert uniquement à déterminer si une version est plus récente qu'une autre, les chiffres les plus élevés indiquant les versions les plus récentes. Ce n'est pas le numéro de version indiqué aux utilisateurs; ce nombre est défini par l'attribut versionName . La valeur doit être définie comme un entier, tel que "100". Vous pouvez le définir comme vous le souhaitez, à condition que chaque version successive ait un numéro plus élevé. Par exemple, cela pourrait être un numéro de build. Vous pouvez également traduire un numéro de version au format "x.y" en un entier en codant les "x" et "y" séparément dans les 16 bits supérieurs et inférieurs. Ou vous pouvez simplement augmenter le nombre d'un à chaque fois qu'une nouvelle version est publiée.

Android: versionName Le numéro de version indiqué aux utilisateurs. Cet attribut peut être défini en tant que chaîne brute ou en tant que référence à une ressource de chaîne. La chaîne n'a d'autre but que d'être affichée aux utilisateurs. L'attribut versionCode contient le numéro de version significatif utilisé en interne.

0
PeterH

Je suis confronté au même problème, et après beaucoup de travail et de recherche, j'ai trouvé la solution: je viens de nettoyer le projet, puis de construire l'apk. -Build-> Clean Project -Build-> Build APK (s) J'espère que c'est utile .....

0
Mohamad Abdallah

J'ai rencontré ce problème lorsque j'ai essayé de créer et d'installer mon application sur un téléphone Android 8.1.0 (API 26).

La seule raison est que j'ai ajouté Android:hasCode="false" à la balise application dans le fichier manifest. Cependant, cela a fonctionné sur l'API 24 avec le même code lorsque j'ai essayé il y a plusieurs mois (STRANGE?). 

Après avoir supprimé cet attribut, le problème disparaît.

0
Lei Guo

J'avais le même problème aujourd'hui. Et essayé toutes les solutions ci-dessus déjà données mais rien ne fonctionnait pour moi. Ensuite, j'ai passé quelque temps et j'ai découvert la raison. Je pensais que cela pourrait également faire gagner du temps aux autres développeurs que je partage ici. Le problème était avec un nom de paquet incorrect. J'utilisais l'architecture MVP et j'ai gardé mes activités dans view package. Et j'ai copié la classe principale de mon autre projet. C'était le piège. Dans le fichier xml, l'activité principale faisait référence à un autre package qui était juste à l'extérieur. Le package n'incluait pas mon répertoire d'affichage (niveau de hiérarchie MVP). Ensuite, j'ai vérifié le manifeste aussi. Le même problème que j'ai trouvé là aussi. J'ai donc fourni le chemin d'accès complet (nom du paquet) de mon activité (jusqu'à ce que le répertoire/paquet de vues de MVP y ait gardé toutes mes activités). Cela a résolu mon problème. J'espère que cela aide les autres aussi.

0
Abdul Waheed

Je suis également confronté au même problème, nous pouvons résoudre ce problème en

1- Désinstaller l'application.

2- Reconstruire le projet.

3- Nettoyez le projet.

4- Invalider et redémarrer le projet depuis fichier -> invalider et redémarrer.

0
Atif Mukhtiar