9
votes

Impossible de trouver la classe «androidx.multidex.MultiDexApplication» sur le chemin: DexPathList sur l'API inférieure <= 19 appareils

J'essaye d'ajouter la prise en charge de Multidex à mon application. Mais j'obtiens une erreur:

<application
  android:name="androidx.multidex.MultiDexApplication"
  ... >
...
</application>

Mon diplômé a:

depenencies {
   ...
   implementation 'androidx.multidex:multidex:2.0.1'
   ...
}

et

defaultConfig {
   multiDexEnabled true
}

Mon AndroidManifest.xml a:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo: java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication" on path: DexPathList[[zip       file "/data/app/com.dfn.partner-2.apk"],nativeLibraryDirectories[/data/app-lib/se.android-2, /vendor/lib, /system/lib]]

Qu'est-ce qui ne va pas?


7 commentaires

Il semble rechercher la version androidx de la bibliothèque de support multidex. Quelqu'un d'autre pourra peut-être donner une réponse plus complète sur ce qui ne va pas ici, mais essayez de changer la dépendance mutlidex à la version androidx.multidex:multidex:2.0.1 . Lorsque vous faites cela, vous devrez probablement mettre à jour le android:name de votre application dans le manifeste vers androidx.multidex.MultiDexApplication également.


@GeorgeMulligan Je me suis trompé dans la question, j'utilise androidx.multidex.MultiDexApplication et 'androidx.multidex:multidex:2.0.1' dans l'application et une erreur apparaît


@GeorgeMulligan J'ai juste essayé différentes options.


Il y a une question similaire ici . Pour votre APK, pouvez-vous voir si les classes liées au multidex se trouvent également en dehors du fichier dex principal (classes.dex) à l'aide de l'analyseur APK dans Android Studio?


Avez-vous utilisé une classe d'application personnalisée?


@ Md.ibrahimkhalil oui


Voyez la réponse.


5 Réponses :


1
votes

Pour le niveau API <21, la plateforme utilise le runtime Dalvik pour exécuter le code d'application. Dans de tels cas, la bibliothèque multidex doit faire partie du fichier DEX principal de votre application, qui peut ensuite gérer l'accès aux fichiers DEX supplémentaires et au code qu'ils contiennent.

Dans votre cas, il semble que la bibliothèque Multidex ne soit pas présente dans le fichier dex principal et, par conséquent, au démarrage, votre application vous donne une erreur: java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication"

Vous devez spécifier explicitement ces classes multidex dans multiDexKeepFile ou multiDexKeepProguard pour les marquer comme requises dans dex primaire.

multiDexKeepFile

android {
    buildTypes {
        release {
            multiDexKeepProguard file('multidex-main-dex-list.pro')
            ...
        }
    }
}

Le contenu de multidex-main-dex-list.txt se présente comme suit:

androidx.multidex.MultiDexApplication

multiDexKeepProguard

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-main-dex-list.txt')
            ...
        }
    }
}

Le contenu de multidex-main-dex-list.txt se présente comme suit:

-keep class androidx.multidex.MultiDexApplication


0 commentaires

17
votes

J'ai eu cette erreur après avoir ajouté multidex jusqu'à ce que je nettoie:

./gradlew clean


1 commentaires

Après avoir ajouté multidex depuis androidx, j'ai eu son erreur. "Clean Project", puis "Syncing project with Gradle files", puis relancez et cela a fonctionné.



0
votes

si vous utilisez androidx, utilisez la dépendance ci-dessous

dependencies {
    // ...
    implementation 'com.android.support:multidex:1.0.3'
}

pour l'utilisation de la bibliothèque de support

dependencies {
    // ...
    def multidex_version = "2.0.1"
    implementation "androidx.multidex:multidex:$multidex_version"
}


0 commentaires

12
votes

J'ai nettoyé le projet:

Construire -> Projet propre

puis je suis allé à:

Fichier -> Invalider les caches / Redémarrer

Compilez, maintenant devrait fonctionner!


0 commentaires

0
votes

Si vous utilisez le vecteur comme images, changez android: src en app: srcCompat dans votre Xml


0 commentaires