J'essaie le nouveau Support MultiDex sur mon application et jusqu'à présent, j'ai réussi à compiler mon application correctement, mais lors de son exécution, je reçois l'exception suivante:
Java.lang.RuntimeException: Unable to instantiate application Android.support.multidex.MultiDexApplication: Java.lang.ClassNotFoundException: Didn't find class "Android.support.multidex.MultiDexApplication" on path: DexPathList[[Zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
at Android.app.LoadedApk.makeApplication(LoadedApk.Java:507)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4382)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:139)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1270)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5086)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.multidex.MultiDexApplication" on path: DexPathList[[Zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:497)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:457)
at Android.app.Instrumentation.newApplication(Instrumentation.Java:998)
at Android.app.LoadedApk.makeApplication(LoadedApk.Java:502)
Ceci est mon fichier de classement:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.Android.support:support-v4:21.0.0'
compile 'com.Android.support:support-v13:21.0.0'
compile 'com.Android.support:appcompat-v7:21.0.0'
}
Et mon AndroidManifest.xml:
<application
Android:name="Android.support.multidex.MultiDexApplication">
Je ne comprends pas quel est le problème. Je pense que je fais tout en fonction de la documentation. Y a-t-il autre chose qui me manque? Je me suis assuré d'avoir la dernière bibliothèque de support et le référentiel installés à partir du gestionnaire de SDK.
Pour configurer votre projet d'application de manière à utiliser une configuration multidex, vous devez apporter les modifications suivantes à votre projet d'application, en fonction de la version minimale d'Android prise en charge par votre application.
Si votre minSdkVersion est défini sur 21 ou plus, il vous suffit de définir multiDexEnabled sur true dans votre fichier build.gradle au niveau du module, comme indiqué ci-après:
Android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Toutefois, si votre minSdkVersion est défini sur 20 ou moins, vous devez utiliser la bibliothèque de support multidex comme suit:
Modifiez le fichier build.gradle au niveau du module pour activer multidex et ajoutez la bibliothèque multidex en tant que dépendance, comme indiqué ci-dessous:
Android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Selon que vous remplaciez ou non la classe Application, effectuez l'une des opérations suivantes:
Si vous ne remplacez pas la classe Application, modifiez votre fichier manifeste pour définir Android: name dans la balise comme suit:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myapp">
<application
Android:name="Android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Si vous remplacez la classe Application, changez-la pour étendre MultiDexApplication (si possible) comme suit:
public class MyApplication extends MultiDexApplication { ... }
Ou bien, si vous substituez la classe Application mais qu'il n'est pas possible de modifier la classe de base, vous pouvez également remplacer la méthode attachBaseContext () et appeler MultiDex.install (this) pour activer multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
J'utilisais le dernier Android Studio et je suivais le document officiel pour ajouter un support à multidex https://developer.Android.com/studio/build/multidex.html . Mais j'ai toujours la même exception. J'ai passé beaucoup de temps à le résoudre. Enfin, j'ai découvert que la cause était que j'avais activé "Points d'arrêt pour les exceptions Java - Toute exception" et "Points d'arrêt pour les exceptions - Le cas échéant". Après que je les ai désactivés, l'application a fonctionné sans problèmes.
Il suffit de suivre le document officiel sur multidex https://developer.Android.com/studio/build/multidex.html . Ça marche.
J'ai eu récemment ce problème. Malgré aucun changement dans ma configuration, cette erreur a commencé à se produire. J'ai essayé toutes les solutions suggérées, y compris la suppression du périphérique virtuel et la création d'un nouveau.
Cependant, j'ai remarqué que si je construisais un APK et que je le glissais dans l'émulateur pour l'installer, cela fonctionnait bien.
À la fin, nettoyer le projet et le relancer puis cela a fonctionné.
La solution ne m'a pas aidé parce que j'utilisais la version jetpack, c'est-à-dire androidx. bibliothèques.
Suivi officiel doc .
Et
J'ai dû changer de nom pour Android ... Multidex.
<application
Android:name="androidx.multidex.MultiDexApplication" >
...
</application>
Hope It aide les personnes cherchant à ajouter multidex avec jetpack.
Très étrange, j'ai eu le même message d'erreur, mais après avoir corrigé quelques lignes de gradles, cela a fonctionné. Peut-être que cela aide quelqu'un:
Projet build.gradle:
de:
..
dependencies {
// Android Gradle Plugin
classpath 'com.Android.tools.build:gradle:3.2.1'
// Analytics
**classpath 'com.google.gms:google-services:3.0.0'**
}
..
à:..
dependencies {
// Android Gradle Plugin
classpath 'com.Android.tools.build:gradle:3.2.1'
// Analytics
**classpath 'com.google.gms:google-services:3.2.1'**
}
..
Dans le module build.gradle:
de:
..
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
implementation 'com.Android.support:support-v4:26.1.0'
implementation 'com.Android.support:support-compat:26.1.0'
implementation 'com.Android.support:appcompat-v7:26.1.0'
**implementation 'com.google.Android.gms:play-services-analytics:12.0.1'**
}
..
à:
..
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
implementation 'com.Android.support:support-v4:26.1.0'
implementation 'com.Android.support:support-compat:26.1.0'
implementation 'com.Android.support:appcompat-v7:26.1.0'
**implementation 'com.google.Android.gms:play-services-analytics:16.0.5'**
}
..
Il n'y a pas eu d'autres changements dans mon code, mais la version corrigée fonctionnait aussi avec les émulateurs 4.x. Seules les lignes marquées ** sont modifiées.