web-dev-qa-db-fra.com

java.lang.ClassNotFoundException: la classe n'a pas été trouvée sur le chemin: dexpathlist

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 d'un moteur Irrlicht. Ensuite, j'essaie de l'utiliser dans mon projet en suivant le même format que cet exemple. Mais j'ai eu:

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.

99
Karthik Sivam

J'ai essayé toutes les options possibles mais le résultat est zéro. Enfin, j'ai trouvé la solution correcte, ce qui est utile pour moi. Il suffit d'aller sur Désactiver l'exécution instantanée. Allez dans Fichier -> Paramètres -> Construire, Exécution, Déploiement -> Exécution instantanée -> Décochez la case pour l'exécution instantanée . Exécutez votre application une fois et ce fichier apk fonctionne correctement.

69
Ashik Abbas

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 Order and Export.
  4. Dans la liste, assurez-vous que les bibliothèques ou les fichiers JAR externes que vous avez ajoutés à votre projet sont vérifié.
  5. Enfin, nettoyez votre projet et exécutez-le.

Vous pouvez également vérifier ceci répondre.

64
mnsalim

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

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

remplacez ceci par:

<activity Android:name=".POMActivity"

ou

<activity Android:name="com.irrlicht.example1.POMActivity"
36
Sushil

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

20
V. Kalyuzhnyu

Je devrais comprendre le problème simplement en voyant 

erreurs de dex

Mais il a fallu une demi-journée pour régler le problème.
Je résous ce problème en suivant les instructions de la page 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'
 }

Puis étendez la classe d’application (ou déclarez la classe d’application dans AndroidManifest.xml ou remplacez la fonction attachBaseContext() par la classe MultiDexApplication comme indiqué sur le lien ci-dessus.

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

19
Akash Bisariya

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

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

et vous modifiez le nom package de la vue de "com.example" en un nom différent, mais vous oubliez de le modifier également dans la présentation.

15
petrnohejl

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

11
Ali Gürelli
  1. changer l'ordre des bibliothèques 
  2. nettoyer et reconstruire 
  3. a travaillé pour moi. 

worked for me.

11
crazyjune

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">
10
Manohar Reddy

Il suffit d’essayer Clean Project & Rebuild Project .

9
nicolas asinovich

J'ai fait face à ce problème plusieurs fois et ils ont tous été résolus en désactivant Instant Run .

8
mohnage7

Si le projet compilait avant, effacez simplement le cache en utilisant: 

./gradlew clean

ou 

./gradlew cleanBuildCache

ou pour les fenêtres 

gradlew cleanBuildCache

https://developer.Android.com/studio/build/build-cache.html

6
Romuald

Nous n'avons pas besoin d'avoir personnalisé Application classe qui s'étend/ MultiDexApplication . Au lieu de cela, nous pouvons avoir comme ceci 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.

5
Abdul Gaffar

Il suffit de nettoyer votre projet. Ça marche pour moi.

5
Ahamadullah Saikat

Lorsque vous utilisez multidex, essayez d’étendre votre classe d’applications avec MultiDexAppication au lieu d’Application et remplacez la méthode ci-dessous par cette méthode requise pour Android sous la version 5.0 (car la version 5.0 et les versions ultérieures prennent en charge multidex)

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

et dans les dépendances ajouter ceci

compile 'com.Android.support:multidex:1.0.1'
5

Ce crash ne concernait que les appareils Samsung Lollipop et cette solution fonctionnait pour moi.

dexOptions {
     preDexLibraries false
}

Je poste cette réponse ici car cette question est actuellement le résultat de recherche le mieux classé sur Google pour cet incident et aucune des réponses ci-dessus ne fonctionne pour moi. 

3
blinkmacalahan

Dans mon cas, ce problème est dû à Kotlin. Dans mon code existant, il y avait une classe qui était écrite en Kotlin. J'ai construit l'application, elle l'a installée et dès la première activité de l'application ouverte s'est écrasée. dans le logcat cette erreur était affichée. J'ai ensuite mis à jour ma version Kotlin du site Web de Kotlin dans un fichier de description d'application. Reconstruisez l'application à nouveau et cela a bien fonctionné à ce moment-là.

3
Harry .Naeem

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

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’utilisais le "Fix Project Setup" depuis le fichier .Java dans Eclipse, mais cela ne fonctionnait pas, je devais donc l’ajouter manuellement ici et cela fonctionnait

3
Ahmed Adel Ismail

Il suffit de changer le nom de votre dossier de lib à libs,

Ensuite, vous verrez quelques marques d'erreur dans votre projet, pour résoudre ce droitCliquez sur le projet>

Properties > Java Build Path > libraries:

Supprimez toute la bibliothèque avec des marques rouges, puis apply > ok > après que nettoyez votre projet . TADA voir la magie :)

3
Walking Code

La solution suivante a fonctionné pour moi ...

J'ai essayé tout ce qui est mentionné ci-dessus, mais mon application ne fonctionnait toujours pas . J'ai une application native qui s'exécute sur la dernière version de Gradle 4+ et du studio Android.

J'ai eu le problème où si je lance réact-native run-Android il échouait avec le problème en disant qu'il n'est pas capable de trouver la classe MainApplication ... i.e ClassNotFoundException

J'ai pu résoudre le problème lorsque j'ai mis à jour mon fichier gradle.properties afin qu'il utilise le compilateur D8.

J'ai ajouté:

Android.enableD8 = true

à mon gradle.properties

Détails de la documentation ici: https://Android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

2
nkadu1

Selon mon entendement, je reçois le problème après la mise à jour de Android studio 2.1 à 2.3 en raison de la fonctionnalité instantanée, mon application ne fonctionnera pas si je copie l’apk de la sortie et que je le mets dans la sdcard . option ne construire apk dans le studio Android.

1
user2306383

Ashik abbas answer (disable Instant Run) fonctionne pour moi, mais j’ai besoin de Instant Run, enfin j’ai trouvé la solution qui m’est utile . Il suffit de désactiver minifyEnabled . allez dans build.gradle (Module: app) dans debug pour bloquer et désactiver minifyEnabled:

debug {
            minifyEnabled false

        }
1
hofs

J'ai eu la même erreur et certaines réponses me induisent en erreur sur un problème de débutant. J'ai eu le mauvais paquet dans mon descripteur de vue personnalisé comme ci-dessous. J'espère que ça 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" />
1
lauksas

Si vous avez activé minifyEnabled et shrinkResources sur true dans votre fichier de dégradé d'application. Vous devez ajouter la ligne suivante dans le fichier proguard-rules.pro

-keep class com.votre nom_package. ** {*; }

parce que la minification est supprimée de certaines classes importantes de notre fichier apk. 

1
Naveen Kumar M

Si vous recevez cette erreur après avoir supprimé une dépendance de niveau, vérifiez votre manifeste et assurez-vous d'avoir supprimé toutes les entrées correspondant à cette dépendance.

1
dees91

Dans mon cas, j’ai utilisé l’ancienne bibliothèque d’espaces de noms lors de la mise en place de mon projet sous Android.

La solution consistait à remplacer le composant Android.support.design.widget.BottomNavigationView par le composant approprié pour sortir de la bibliothèque de support: com.google.Android.material.bottomnavigation.BottomNavigationView.

0
Artik

Une des raisons possibles serait le chemin d'accès incorrect de l'activité dans le fichier Apps AndroidManifest.xml. Enregistrez l'activité dans votre fichier AndroidManifest.xml avec le chemin relatif complet, comme ci-dessous.

<activity Android:name="<full_path>.ActivityName" />
0
Akki

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

0
PK Gupta

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

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers
0
j2emanue

Vous pouvez également voir Classe non trouvée lors de la suppression des intentions Android sur Parcelable ou Android E/Colis Classe non trouvée lors de la suppression des appels (uniquement sur Samsung Tab3) , mais aucun avis de ces sujets ne m'a aidé. J'ai même réécrit une classe parcellaire.

0
CoolMind

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

0
passatgt