在API版本小于等于19的设备上,路径为DexPathList的地方没有找到“androidx.multidex.MultiDexApplication”类。

14

我正在尝试为我的应用添加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]]

我的Gradle包含:

defaultConfig {
   multiDexEnabled true
}

并且

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

我的 AndroidManifest.xml 文件包含:

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

可能出了什么问题?


它似乎正在寻找multidex支持库的androidx版本。其他人可能能够给出更完整的答案,说明这里出了什么问题,但请尝试将mutlidex依赖项更改为androidx版本androidx.multidex:multidex:2.0.1。当您这样做时,您可能还需要在清单中更新应用程序的android:nameandroidx.multidex.MultiDexApplication - George Mulligan
@GeorgeMulligan 我在问题描述中有误,我在应用程序中使用了 androidx.multidex.MultiDexApplication'androidx.multidex:multidex:2.0.1',但是出现了错误。 - Vladyslav Panchenko
@GeorgeMulligan,我刚刚尝试了不同的选项。 - Vladyslav Panchenko
你是否使用过自定义应用程序类? - Md.ibrahim khalil
请查看答案。 - Md.ibrahim khalil
显示剩余2条评论
6个回答

19

在添加 multidex 后,我遇到了这个错误,直到进行了清理操作:

./gradlew clean


1
我在使用androidx添加multidex后遇到了这个错误。尝试"Clean Project",然后"Syncing project with Gradle files",再次运行即可解决问题。 - Jorge Gil

17

我清理了项目:

构建 -> 清理项目

然后我去到:

文件 -> 清除缓存 / 重启

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


这对我起作用了。你需要按照答案中写的顺序完全相同地执行它们。 - Murat

3

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

在您的情况下,看起来 Multidex 库不存在于主 dex 文件中,因此在启动期间,您的应用程序会给出错误:java.lang.ClassNotFoundException: 没有找到类 "androidx.multidex.MultiDexApplication"

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

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


奇怪的是,在迁移到AndroidX库之前,我并没有保留类multidex,但在迁移到AndroidX库后,我需要添加-keep class androidx.multidex.MultiDexApplication以确保应用程序在Android 5之前的设备上运行。 - user1652110

1
在我的情况下,我不得不替换我的 build.gradle.kts(模块:app)中的内容:
implementation("com.android.support:multidex:1.0.3")

使用

implementation("androidx.multidex:multidex:2.0.1")

并在我的gradle.properties中添加以下内容:

android.useAndroidX=true

1
如果您正在使用AndroidX,请使用以下依赖项。
dependencies {
    // ...
    def multidex_version = "2.0.1"
    implementation "androidx.multidex:multidex:$multidex_version"
}

用于支持库使用

dependencies {
    // ...
    implementation 'com.android.support:multidex:1.0.3'
}

0
如果您正在使用向量作为图像,请在Xml中将android:src更改为app:srcCompat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接