Ik probeer de nieuwe MultiDex-ondersteuningin mijn app en tot nu toe is het me gelukt compileer mijn app correct, maar bij het uitvoeren ervan krijg ik de volgende uitzondering:
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)
Dit is mijn gradle-bestand:
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'
}
En mijn AndroidManifest.xml:
<application
android:name="android.support.multidex.MultiDexApplication">
Ik begrijp niet wat het probleem is. Ik denk dat ik alles volgens de documentatie doe. Is er nog iets dat ik mis? Ik zorgde ervoor dat ik de nieuwste ondersteuningsbibliotheek en repo had geïnstalleerd vanuit de SDK-manager.
Antwoord 1, autoriteit 100%
De oplossing hielp me niet omdat ik de jetpack-versie gebruikte, dwz Androidx. bibliotheken.
Officiële docgevolgd.
En
Ik moest de naam veranderen in androidx….Multidex.
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
Hoop dat het andere mensen helpt die multidex willen toevoegen met jetpack.
Antwoord 2, autoriteit 42%
In mijn geval is het opgelost door wijzigingen in onderstaande code in Manifest van
android:name="android.support.multidex.MultiDexApplication"
naar
android:name="androidx.multidex.MultiDexApplication"
Antwoord 3, autoriteit 31%
Mijn configuratie:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.+' // 0.14.1, 2014-11-6
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
android {
compileSdkVersion = 21
buildToolsVersion = "21.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
}
Helaas heb ik hetzelfde probleem. Maar ik vond een vreemde situatie:
build/intermediates/dex/debug:
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes.dex
apk uitpakken, build/outputs/apk:
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes.dex
In apk zouden de hoofdklassen van klassen.dex groter moeten zijn dan klassen2.dex, maar dat is niet het geval. Ik doe ook dex2jar & unzip jar om klassen te controleren, de toepassingsklasse is er niet in klassen.dex, het is integendeel in klassen2.dex.
Ik had het echter moeten repareren. Hier is mijn gepatchte Android-gradle-plug-in die je kunt proberen:
buildscript {
repositories {
mavenCentral()
maven { url 'https://github.com/yongjhih/android-gradle-plugin.m2/raw/master/' }
}
dependencies {
classpath 'com.infstory.tools.build:gradle:0.14.+'
}
}
De patch is binnen: https://github.com/yongjhih/android -gradle-plugin/commit/9c2212e3b1b4c6e1f7b47f2086aba1903a6258bf
of
https://android-review.googlesource.com/#/c/113331/
probleem: https://code.google.com/p/ android/issues/detail?id=78761
De officiële patch is https://android-review.googlesource.com/# /c/113201/die al zijn samengevoegd, ik denk dat dit in de volgende versie kan worden opgelost.
Al opgelost op 0.14.2 (2014/11/10).(van http://tools.android.com/tech-docs/new-build-system)
Release notes:
0.14.2 (2014/11/10)
Fix potential multi-dex issue where the dex files could be renamed during packaging, leading to the wrong main dex file being used.
Fix versionNameSuffix support
Fix BuildType.initWith to copy shrinkResources flag
setup default proguard rule file if none are provided (SDK/tools/proguard/proguard-android.txt)
BuildType.pseudoLocalesEnabled flag to include fake locales in apk.
Antwoord 4, autoriteit 13%
Als u uw app-project wilt instellen om een multidex-configuratie te gebruiken, moet u de volgende wijzigingen aanbrengen in uw app-project, afhankelijk van de minimale Android-versie die uw app ondersteunt.
Als je minSdkVersion is ingesteld op 21 of hoger, hoef je alleen maar multiDexEnabled in te stellen op true in je build.gradle-bestand op moduleniveau, zoals hier wordt weergegeven:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Als uw minSdkVersion echter is ingesteld op 20 of lager, moet u de multidex-ondersteuningsbibliotheek als volgt gebruiken:
-
Wijzig het build.gradle-bestand op moduleniveau om multidex in te schakelen en voeg de multidex-bibliotheek toe als een afhankelijkheid, zoals hier weergegeven:
android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.1' }
-
Afhankelijk van het feit of u de klasse Application overschrijft, voert u een van de volgende handelingen uit:
-
Als u de klasse Application niet overschrijft, bewerkt u uw manifestbestand om android:name als volgt in de tag in te stellen:
<?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>
-
Als u de klasse Application overschrijft, wijzigt u deze om MultiDexApplication (indien mogelijk) als volgt uit te breiden:
public class MyApplication extends MultiDexApplication { ... }
-
Of als u de klasse Application overschrijft, maar het niet mogelijk is om de basisklasse te wijzigen, kunt u in plaats daarvan de methode attachBaseContext() overschrijven en MultiDex.install(this) aanroepen om multidex in te schakelen:
public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
-
Antwoord 5, autoriteit 11%
Ik had onlangs dit probleem. Ondanks geen wijziging in mijn configuratie begon deze fout zich voor te doen. Ik heb alle voorgestelde oplossingen geprobeerd, inclusief het verwijderen van het virtuele apparaat en het maken van een nieuw apparaat.
Ik merkte echter wel dat als ik een APK bouwde en deze naar de emulator sleepte om te installeren, deze prima werkte.
Uiteindelijk het project opschonen en opnieuw uitvoeren en toen werkte het.
Antwoord 6, autoriteit 11%
Voor mij was het antwoord om over te schakelen naar de Androidx-versies
android:name="androidx.multidex.MultiDexApplication"
implementation "androidx.multidex:multidex:2.0.1"
Antwoord 7, autoriteit 5%
Ik gebruikte de nieuwste Android Studio en volgde het officiële document om ondersteuning toe te voegen voor multidex https ://developer.android.com/studio/build/multidex.html. Maar ik heb nog steeds dezelfde uitzondering. Ik heb er veel tijd aan besteed om het op te lossen. Eindelijk ontdekte ik dat de oorzaak was dat ik “Java Exception Breakpoints – Any exception” en “Exception Breakpoints – When any is throwed” had ingeschakeld. Nadat ik ze had uitgeschakeld, werkte de app zonder problemen.
Volg gewoon het officiële document over multidex https://developer.android.com/studio /build/multidex.html. Het werkt.
Antwoord 8, autoriteit 3%
In mijn geval heb ik zojuist de build.gradle gewijzigd en heb ik de AndroidManifest zo gelaten:
android:name=".MainApplication"
Ik gebruik React Native.
Antwoord 9, autoriteit 3%
ik ben veranderd
in manifest aanvraag
android:name="android.support.multidex.MultiDexApplication"
naar
android:name="androidx.multidex.MultiDexApplication"
en het werkt prima
Antwoord 10, autoriteit 2%
Dit werkte voor mij.
Bestand -> Project synchroniseren met Grandle-bestanden
Antwoord 11
Heel vreemd, ik kreeg dezelfde foutmelding, maar nadat ik wat graduele regels had gerepareerd, werkte het. Misschien helpt het iemand:
Project build.gradle:
van:
..
dependencies {
// Android Gradle Plugin
classpath 'com.android.tools.build:gradle:3.2.1'
// Analytics
**classpath 'com.google.gms:google-services:3.0.0'**
}
..
naar:
..
dependencies {
// Android Gradle Plugin
classpath 'com.android.tools.build:gradle:3.2.1'
// Analytics
**classpath 'com.google.gms:google-services:3.2.1'**
}
..
In de module build.gradle:
van:
..
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'**
}
..
naar:
..
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'**
}
..
Er waren geen andere wijzigingen in mijn code, maar de vaste versie werkte ook op 4.x-emulators. Alleen de ** gemarkeerde regels zijn gewijzigd.
Antwoord 12
Delete ./gradle .idea and build directory
Clean project
Uninstall app if already install on device and again install
Antwoord 13
Het probleem zit in het Gradle-bestand. Verhoog de versie. Dat is het
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
}
Antwoord 14
Android {
compileSdkVersie 30
buildToolsVersion “30.0.1”
defaultConfig {
applicationId "com.nandeproduction.dailycost"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}}
[Oplossing]Gebruik deze speciale code
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}