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?
5 Réponses :
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
J'ai eu cette erreur après avoir ajouté multidex jusqu'à ce que je nettoie:
./gradlew clean
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é.
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" }
J'ai nettoyé le projet:
Construire -> Projet propre
puis je suis allé à:
Fichier -> Invalider les caches / Redémarrer
Compilez, maintenant devrait fonctionner!
Si vous utilisez le vecteur comme images, changez android: src en app: srcCompat dans votre Xml
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 leandroid:name
de votre application dans le manifeste versandroidx.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.