web-dev-qa-db-fra.com

Vous n'avez pas trouvé la classe sur le chemin: DexPathList?

Mon application fonctionne correctement lorsque je teste un périphérique réel avec USB dans un studio Android. Mais lorsque j'envoie l'apk sur un autre périphérique et que je l'installe là-bas, cela ne fonctionne pas.App se bloque. Les erreurs sont données ci-dessous:

FATAL EXCEPTION: main Process: com.w3xplorers.cmch,PID: 17715                                                                           Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.w3xplorers.cmch/com.w3xplorers.cmch.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2395)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
    at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:168)
    at Android.app.ActivityThread.main(ActivityThread.Java:5845)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.Java:797)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)
    Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
    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:1085)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2385)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544) 
    at Android.app.ActivityThread.access$900(ActivityThread.Java:150) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:168) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5845) 
    at Java.lang.reflect.Method.invoke(Native Method) 
    atcom.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:797) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)                                                                         Suppressed: Java.lang.ClassNotFoundException: com.w3xplorers.cmch.MainActivity
    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)                                                                                ... 12 more
    Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Mes manifestes est ci-dessous:

`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.w3xplorers.cmch">

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_CONTACTS" />
<uses-permission Android:name="Android.permission.SEND_SMS" />


<application
    Android:name="com.w3xplorers.cmch.EnableMultiDex"
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="com.w3xplorers.cmch.MainActivity"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        Android:name="com.w3xplorers.cmch.HomeActivity"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.QuickSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.GroupSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.SelfSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Contact"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Favourite"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Info"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity Android:name="com.w3xplorers.cmch.Dialog" />
</application>

</manifest>`

Gradé ci-dessous:

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.w3xplorers.cmch"
    minSdkVersion 13
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}
}


dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', 
{
    exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.3.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.0-alpha5'
compile 'com.Android.support:design:25.3.0'
compile 'com.andreabaccega:Android-form-edittext:1.0.3'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.Android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
}
16
Avijit

Je n'ai pas trouvé de solution parfaite à mon problème.Mais quand je télécharge mon apk sur google play et que je télécharge à partir de là, l'application fonctionne très bien. C'est la solution la plus bizarre que j'ai jamais trouvée.

1
Avijit

Accédez au fichier project build.gradle et réduisez la version de la dépendance de gradle à une valeur inférieure à 2.3.0 , par exemple, utilisez 2.2.3

dependencies {
    classpath 'com.Android.tools.build:gradle:2.2.3'
    ....
}

Puis nettoyez -> compilez -> installez apk sur un autre périphérique -> cela peut êtreOKthen!

8
ridoy

Je pense que le problème est que AndroidStudio est lié à l'utilisation de "Instant Run" au lieu de compiler et d'installer un nouveau APK. 

Désactivez "Exécution instantanée" à partir de Fichier -> Paramètres -> Construction, exécution, déploiement -> Exécution instantanée.

5
Dr. Hasan Hashem

dans votre tag d'application, changez

Android:name="com.w3xplorers.cmch.EnableMultiDex"

avec 

Android:name="Android.support.multidex.MultiDexApplication" 

J'espère que cela t'aides :)

plus d'informations à:

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

4

Comme vous l'avez dit, vous construisez l'application et transmettez-la à votre téléphone via USB, je crois que vous avez ensuite copié l'apk à partir de votre répertoire de construction et essayez de pousser et de l'exécuter sur un autre appareil. S'il vous plaît essayez de construire votre apk sans cibler ou connecter aucun appareil ou émulateur ce que je veux dire qui construisent votre apk depuis un terminal sans connecter votre appareil. Soit ça va marcher ou ça va montrer quelque chose. 

2
Omar Faroque Anik

Vous devez suivre la documentation officielle: https://developer.Android.com/studio/build/multidex.html#mdex-gradle

build.gradle:

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}
Android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

Votre classe App

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
2
Kirill Vashilo

Dans votre build.gradle ajouter 

defaultConfig { 
          multiDexEnabled true
 } 

Ajoutez également une dépendance en tant que 

dependencies {
         compile 'com.Android.support:multidex:1.0.0'}
1
Smeet Hirekhan

C'est peut-être parce que vous avez activé la fonction Instant Run, essayez donc de Désactiver Instant Run .

Fichier -> Paramètres -> Construction, exécution, déploiement -> Exécution instantanée -> Décochez la case pour l'exécution instantanée

1
Nikunj

J'ai également fait face à un problème similaire. Dans mon cas, j'ai résolu le problème en ajoutant ceci ci-dessous buildTypes

dexOptions {
    javaMaxHeapSize "4g"
}

également utilisé 

defaultConfig { 
          multiDexEnabled true
 } 

et

dependencies {
         compile 'com.Android.support:multidex:1.0.0'
}
1
Tamal
defaultConfig {

    minSdkVersion 14
    targetSdkVersion 21

    multiDexEnabled true
}

 dependencies {
     compile 'com.Android.support:multidex:1.0.1'
 }
Android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}



public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

Peut-être que vous ne faites pas votre application Multidex.install (this);

1
tosslife
  1. Essayez de supprimer .idea et .gradle
  2. Redémarrez Android Studio et reconstruisez votre projet 
  3. Cela a fonctionné comme un charme pour moi :)

It worked like a charm for me :)

0
Nicolas Facciolo

Pour les personnes qui rencontrent cela et qui utilisent Kotlin pour leurs tests d’instrumentation:

N'oubliez pas que les espaces dans les noms de méthode ne fonctionnent que pour les tests JVM et les non tests d'instrumentation Android (comme noté par Jake Wharton , il a également déclaré que cela pourrait être corrigé à l'avenir)

Pour le moment, quand j'essaye de faire un test comme:

@Test
fun `spaces should work in names`() {
}

La sortie de test dit:

Aucun test n'a été trouvé

Et le journal dit:

A commencé à exécuter des tests

Échec du test en cours: L'exécution de l'instrumentation a échoué en raison de la «défaillance du processus».

Suite de test vide.

Alors que Logcat génère cette exception:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example, PID: 5424
    Java.lang.RuntimeException: Unable to instantiate instrumentation
    ComponentInfo{com.example.test/Android.support.test.runner.AndroidJUnitRunner}:
    Java.lang.ClassNotFoundException: Didn't find class
    "Android.support.test.runner.AndroidJUnitRunner"
    on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5730)
        at Android.app.ActivityThread.-wrap1(Unknown Source:0)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
        at Android.os.Handler.dispatchMessage(Handler.Java:105)
        at Android.os.Looper.loop(Looper.Java:164)
        at Android.app.ActivityThread.main(ActivityThread.Java:6541)
        at Java.lang.reflect.Method.invoke(Native Method)
        at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
    Caused by: Java.lang.ClassNotFoundException: Didn't find class
    "Android.support.test.runner.AndroidJUnitRunner" on path:
    DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:93)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5728)
        at Android.app.ActivityThread.-wrap1(Unknown Source:0) 
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661) 
        at Android.os.Handler.dispatchMessage(Handler.Java:105) 
        at Android.os.Looper.loop(Looper.Java:164) 
        at Android.app.ActivityThread.main(ActivityThread.Java:6541) 
        at Java.lang.reflect.Method.invoke(Native Method) 
        at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240) 
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)

Comme vous pouvez le constater, les erreurs ne sont pas très utiles ici. J'espère donc que les gens trouveront cette réponse maintenant. La solution est simple, utilisez des noms valides comme:

@Test
fun spaces_dontWorkInNames() {
}
0
arekolek

Il me semble aléatoire de résoudre ce problème. Je change simplement le nom Android: le nom du MultiDex à partir d'Android, je l'exécute, puis je le replace dans ma propre application.

0
Pencilcheck

Effacez votre projet et Invalidate caches/restart dans votre section de fichiers de studio Android, cela fonctionne pour moi.

0
Shyam