【问题标题】:Didn't find class “androidx.multidex.MultiDexApplication” on path: DexPathList on lower API <= 19 devices在路径上找不到类“androidx.multidex.MultiDexApplication”:DexPathList on lower API <= 19 devices
【发布时间】:2019-01-24 15:05:14
【问题描述】:

我正在尝试将 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>

可能出了什么问题?

【问题讨论】:

  • 它似乎在寻找 androidx 版本的 multidex 支持库。其他人可能能够就这里出了什么问题给出更完整的答案,但请尝试将 mutlidex 依赖项更改为 androidx 版本androidx.multidex:multidex:2.0.1。执行此操作时,您可能还需要将清单中应用程序的 android:name 更新为 androidx.multidex.MultiDexApplication
  • @GeorgeMulligan 问题我弄错了,我在应用程序中使用androidx.multidex.MultiDexApplication'androidx.multidex:multidex:2.0.1' 出现错误
  • @GeorgeMulligan 我只是尝试了不同的选项。
  • 有一个类似的问题here。对于您的 APK,您能否使用 Android Studio 中的 APK 分析器查看是否在主 dex 文件 (classes.dex) 之外也找到了与 multidex 相关的类?
  • 你用过自定义应用类吗??

标签: android gradle androidx android-multidex


【解决方案1】:

我在添加 multidex 后出现此错误,直到我清理:

./gradlew clean

【讨论】:

  • 从 androidx 添加 multidex 后,我得到了他的错误。 “清理项目”,然后“将项目与 Gradle 文件同步”,然后再次运行它就可以了。
【解决方案2】:

我清理了项目:

构建 -> 清理项目

然后我去了:

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

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

【讨论】:

  • 这对我有用。您需要按照与答案中所写完全相同的顺序进行操作。
【解决方案3】:

对于 api 级别

在您的情况下,主 dex 文件中似乎不存在 Multidex 库,因此在启动期间,您的应用程序给您错误:java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication"

您需要在 multiDexKeepFile 或 multiDexKeepProguard 中明确指定这些 multidex 类,以在主 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

【讨论】:

  • 奇怪的是,在迁移到 AndroidX 库之前,我没有保留类 multidex,但在迁移到 AndroidX 库后,我需要添加 -keep class androidx.multidex.MultiDexApplication 以确保应用程序在pre android 5 设备
【解决方案4】:

如果您使用的是 androidx,请使用下面的依赖项

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

供支持库使用

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

【讨论】:

    【解决方案5】:

    如果您使用矢量作为图像,请将您的 Xml 中的 android:src 更改为 app:srcCompat

    【讨论】:

      【解决方案6】:

      就我而言,我必须在 build.gradle.kts (module: app) 中替换:

      implementation("com.android.support:multidex:1.0.3")
      

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

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

      android.useAndroidX=true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-04
        • 2017-09-12
        • 2014-05-29
        • 2015-07-01
        • 2018-12-30
        • 2015-01-02
        • 2014-04-19
        相关资源
        最近更新 更多