完全实现了Multidex的Android 4.x NoClassDefFoundError

时间:2017-01-23 16:28:04

标签: android multidex

我最近在我的应用程序中添加了另一个依赖项,将其推到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类没有改变。我最初在调试和发布源代码树下有不同的实现,但是用主源代码树中的单个文件替换它们没有区别。

2 个答案:

答案 0 :(得分:1)

我在Android 4. *设备上也遇到了同样的问题,并且它在某种程度上与使用Jack工具链有关。

Jack was deprecated和Android Studio 2.4预览版6已发布:

  

Android构建系统现在支持Java 8语言功能   在javac / dx编译路径中。 Android Studio的Gradle插件现在   desugars Java 8类文件到Java 7兼容的类文件,所以你   可以使用lambdas,方法引用和Java 8的其他功能。

有关详细信息,请参阅this

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

答案 1 :(得分:0)

尝试将此添加到您的清单中以防万一。

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