Klas “android.support.multidex.MultiDexApplication” niet gevonden op pad: DexPathList

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
}

Other episodes