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