【问题标题】:Android 4.x NoClassDefFoundError with Multidex fully implemented完全实现了 Multidex 的 Android 4.x NoClassDefFoundError
【发布时间】:2017-01-23 16:28:04
【问题描述】:

我最近向我的应用程序添加了另一个依赖项,将其推到了 64k 限制并需要 Multidex。在 Android 4.x 上运行时,应用程序现在在启动时崩溃并出现 NoClassDefFoundError:

FATAL EXCEPTION: main
Process: org.naturenet.debug, PID: 3136
java.lang.NoClassDefFoundError: org.naturenet.util.ForestFire
at org.naturenet.NatureNetApplication.onCreate(NatureNetApplication.java:60)

此错误的其他情况表明这是因为 Multidex 未完全实现,但以下所有更改仍然会发生这种情况:

应用构建文件

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'
    ...
}

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "org.naturenet"
        minSdkVersion 16
        targetSdkVersion 23
        multiDexEnabled true
        jackOptions {
            enabled true
            additionalParameters('jack.incremental': 'true')
        }
    }
}

应用类

public class NatureNetApplication extends MultiDexApplication {

有问题的 ForestFire 类没有改​​变。我最初在调试和发布源代码树下有不同的实现,但是用主源代码树中的单个文件替换它们没有区别。

【问题讨论】:

  • 您是否尝试过清理并再次运行...或从首选项中关闭即时运行??
  • 是的,我已经完成了完全重建并安装到新设备上。我没有使用即时运行。
  • 这可能与 stackoverflow.com/q/39841778/213156 重复,但由于错误页面中建议的解决方法对我不起作用,我不确定。
  • 你见过those instructions吗?你能告诉我org.naturenet.util.ForestFire 类是否放在 main-dex(a.k.a. classes.dex)中吗?如果是这样,那么问题可能会发生,因为org.naturenet.util.ForestFire 依赖的类之一:在这种情况下,再次在 4.x 设备上运行并查找带有 dalvikvm 标记的日志条目(特别是带有 DexOpt 或 VFY 子字符串)。你看到什么相关的了吗?
  • @AlexLipov 我没有,谢谢。我已经退出了 Java 8 和 Jack,现在它正在与 Multidex 一起工作,所以我认为它与遗留错误有关,但我也会尝试。

标签: android android-multidex


【解决方案1】:

我在 Android 4.* 设备上也遇到了同样的问题,并且不知何故与使用 Jack 工具链有关。

但是Jack was deprecated 和 Android Studio 2.4 Preview 6 发布了:

Android 构建系统现在支持 Java 8 语言功能 在 javac/dx 编译路径中。 Android Studio 的 Gradle 插件现在 将 Java 8 类文件脱糖为 Java 7 兼容的类文件,因此您 可以使用 Java 8 的 lambda、方法引用和其他特性。

请参阅this 了解更多信息。

现在您可以安装Android Studio Preview 并从build.gradle 中删除jackOptions

【讨论】:

    【解决方案2】:

    如果没有,请尝试将其添加到清单中。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
    

    欲了解更多信息:https://developer.android.com/studio/build/multidex.html?hl=en-419

    【讨论】:

    • 问题出现在我的扩展 MultiDexApplication 的自定义应用程序类中。它已在清单中指定。
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2019-08-08
    • 2015-01-25
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多