【问题标题】:BuildConfig NoClassDefFoundError on Android KAndroid K 上的 BuildConfig NoClassDefFoundError
【发布时间】:2016-10-03 23:07:57
【问题描述】:

我最近将我的构建环境升级到了 Android studio 2.2、JDK 1.8(带 jack),并且我正在使用带有 gradle-2.14.1 的 gradle wrapper。我的构建/发布变体可以在任何 android 版本 > K 上正确编译和运行。但是,当我尝试在 android K 设备上运行代码时,代码编译正常并且 apk 生成正确,但代码立即崩溃,堆栈跟踪如下代码似乎找不到 BuildConfig 类。将不胜感激任何我可以调查的指针。谢谢!

致命异常:主要 进程:com.trail.android.debug,PID:21045 java.lang.NoClassDefFoundError: com.trail.android.BuildConfig 在 com.trail.android.TrailApplication.attachBaseContext(TrailApplication.java:41) 在 android.app.Application.attach(Application.java:181) 在 android.app.Instrumentation.newApplication(Instrumentation.java:991) 在 android.app.Instrumentation.newApplication(Instrumentation.java:975) 在 android.app.LoadedApk.makeApplication(LoadedApk.java:511) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4317) 在 android.app.ActivityThread.access$1500(ActivityThread.java:135) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • BuildConfig 类应该由 Android 自动生成.. 还是你自己创建的(这很糟糕)?您是否尝试过 Build -> Clean Project -> Rebuild Project
  • 感谢您的回复。我尝试了一个干净的项目-> 重建,但我继续得到同样的错误。我没有编写任何自定义 BuildConfig 并使用默认生成的。令人费解的是,该设置在 android L 及以上版本上运行良好..
  • 最后几个猜测,minSdkVersion 设置对了吗?您是否也尝试过更新构建工具或 Android gradle 插件版本?
  • 是的,我在 build.gradle 中设置了 minSdkVersion 19。构建工具版本是 24.0.2(compileSDK 24),我正在使用插件:'com.android.application'
  • 经过大量调查,看起来我在打:code.google.com/p/android/issues/detail?id=224026。该类恰好位于辅助 dex 文件中,而在 android K 上,我们必须使用旧的 multidex。再加上 Jack,我们遇到了上述错误。

标签: android android-studio gradle


【解决方案1】:

这与https://code.google.com/p/android/issues/detail?id=224026有关

一些类进入二级 dex 文件(在我的情况下,BuildConfig.class 在二级 dex 中)并且 KitKat 无法在二级 dex 中找到(这在 Android L 及更高版本和 pre L 上自动运行,multidex 支持图书馆应该已经解决了这个问题,但我猜我遇到了这个错误)。要解决此问题,请在您的 jackOptions 中添加以下内容。

 jackOptions {
            enabled true
            additionalParameters("jack.dex.output.policy" : "multidex")
            additionalParameters("jack.preprocessor" : "true")
            additionalParameters("jack.preprocessor.file" : "legacyMultidexInstallation.jpp")
            additionalParameters("jack.dex.output.multidex.legacy": "true")
        }

有了这个修复,它对我有用。

【讨论】:

  • 文件 legacyMultidexInstallation.jpp 是什么以及在哪里?
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多