Android 4.4或更低版本的java.lang.NoClassDefFoundError

时间:2015-09-15 01:54:48

标签: android-studio

我有一个最近升级到Gradle构建系统的Android应用程序,例如使用更新版本的构建工具等。

我的targetSdkVersion是19,所以我应该选择Android 4.4及更高版本。当我使用5.0+设备运行时,一切都很好;但是Android 4.4总是因某种java.lang.NoClassDefFoundError错误而崩溃。

作为一个测试,我删除了它抱怨失踪的原始类只是为了让它在指向另一个类时崩溃。

它崩溃的第一个类是第三方库中的内部私有类。删除该库后,它指向应用程序本身的内部私有类。

总结:

  • 该应用在Android 5.0+上正常运行。在任何小于5.0的情况下,它都会与java.lang.NoClassDefFoundError崩溃。
  • 在目前为止的测试中,NoClassDef似乎总是引用一个内部类 - 这只是基于两个测试,所以它可能不是具体的。

这是我的android.manifest文件:https://gist.github.com/rscott78/19dd88ccde66172d9332

1 个答案:

答案 0 :(得分:25)

对于它的价值,当您启用multi-dex支持而不在Application类中添加正确的代码时,可能会发生这种情况。

创建一个类,让它从Application继承,然后添加此覆盖:

@Override
protected void attachBaseContext(Context base) {
  super.attachBaseContext(base);
  MultiDex.install(this);
}

在AndroidManifest中,为您的应用标记添加name属性:

<application name=".MyApplication"