web-dev-qa-db-ja.com

パスにクラス「androidx.multidex.MultiDexApplication」が見つかりませんでした:下位API <= 19デバイスのDexPathList

アプリにMultidex support を追加しようとしています。しかし、エラーが発生します:

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]]

私のグラドルは:

defaultConfig {
   multiDexEnabled true
}

そして

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

私のAndroidManifest.xmlには:

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

何が悪いのでしょうか?

5

APIレベル<21の場合、プラットフォームはアプリケーションコードの実行にDalvikランタイムを使用します。このような場合、multidexライブラリはアプリのプライマリDEXファイルの一部である必要があります。これにより、追加のDEXファイルとそれらに含まれるコードへのアクセスを管理できます。

あなたの場合、Multidexライブラリがプライマリdexファイルに存在しないため、起動時にアプリがエラーを表示します:Java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication"

これらのmultidexクラスを明示的に指定して、multiDexKeepFileまたはmultiDexKeepProguardのいずれかで、プライマリdexで必要なものとしてマークする必要があります。

multiDexKeepFile

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

Multidex-main-dex-list.txtの内容は次のようになります。

androidx.multidex.MultiDexApplication

multiDexKeepProguard

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

Multidex-main-dex-list.txtの内容は次のようになります。

-keep class androidx.multidex.MultiDexApplication

1
nitika

あなたがandroidxを使用している場合は、以下の依存関係を使用してください

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

サポートライブラリ用

dependencies {
    // ...
    implementation 'com.Android.support:multidex:1.0.3'
}
0
Isaac Sekamatte