在以下API上未找到类“ androidx.multidex.MultiDexApplication”:更低的API <= 19设备上的DexPathList

Vla*_*nko 1 android gradle android-multidex androidx

我正在尝试将Multidex 支持添加到我的应用中。但是我得到一个错误:

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]]
Run Code Online (Sandbox Code Playgroud)

我的gradle有:

defaultConfig {
   multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)

depenencies {
   ...
   implementation 'androidx.multidex:multidex:2.0.1'
   ...
}
Run Code Online (Sandbox Code Playgroud)

我的AndroidManifest.xml具有:

<application
  android:name="androidx.multidex.MultiDexApplication"
  ... >
...
</application>
Run Code Online (Sandbox Code Playgroud)

有什么事吗

itz*_*tzo 17

我清理了项目:

构建 -> 清理项目

然后我去了:

文件 -> 使缓存无效/重新启动

编译,现在应该可以工作了!


wes*_*ton 6

添加multidex后我得到了这个错误,直到我清理干净:

./gradlew clean


小智 3

对于 API 级别 < 21,平台使用 Dalvik 运行时来执行应用程序代码。对于这种情况,multidex 库应该是应用程序主 DEX 文件的一部分,然后它可以管理对其他 DEX 文件及其包含的代码的访问。

在您的情况下,看起来主 dex 文件中不存在 Multidex 库,因此在启动过程中,您的应用程序会出现错误:java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication"

您需要在 multiDexKeepFile 或 multiDexKeepProguard 中显式指定这些 multidex 类,以将其标记为主 dex 中所需的。

多DexKeepFile

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-main-dex-list.txt')
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

multidex-main-dex-list.txt 的内容如下:

androidx.multidex.MultiDexApplication

multiDexKeepProguard

android {
    buildTypes {
        release {
            multiDexKeepProguard file('multidex-main-dex-list.pro')
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

multidex-main-dex-list.txt 的内容如下:

-keep class androidx.multidex.MultiDexApplication