在Android 4上使用Android Studio的NoClassDefFoundError

我正在将现有的应用程序从Eclipse转换到Android Studio。 然而,当我在运行4.x的设备(我已经在仿真器上testing了几个版本)上运行它时,它立即崩溃了一个NoClassDefFoundError

我已经试过评论它找不到的类的引用,但总是有另一个。 可以说,犯罪阶级总是这样

  1. 在我自己的代码中
  2. 一个内部类( 更新:更多的调查,这个并不总是如此)

一切工作正常的5.0.1模拟器(我没有一个设备来testing)。 我的build.gradle文件相当长,但看起来像这样:

 apply plugin: 'com.android.application' apply plugin: 'android-apt' def AAVersion = "2.7.1" android { compileSdkVersion 19 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.myapp.android" minSdkVersion 8 targetSdkVersion 19 multiDexEnabled = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } packagingOptions { *snip* } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } repositories { maven { url "https://repo.commonsware.com.s3.amazonaws.com" } } apt { arguments { androidManifestFile variant.outputs[0].processResources.manifestFile resourcePackageName 'com.pact.android' } } dependencies { *snip compile project(':...') declarations apt "com.googlecode.androidannotations:androidannotations:$AAVersion" compile "com.googlecode.androidannotations:androidannotations-api:$AAVersion" compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile 'com.android.support:support-v4:21.0.3' compile 'com.google.android.gms:play-services:3.1.36' *snip many more compile declarations* compile fileTree(dir: 'libs', include: ['*.jar']) } 

引起麻烦的类的一些例子:

  • 在facebook库中实现一个接口的匿名类(作为库项目)
  • Parcelable.CREATOR在我的模型中的实现
  • 一个扩展android.os.Library的内部类
  • 我自己的代码中的内部类
  • 一个从maven实现一个库的接口的类

怎么回事,我该如何解决?

我没有完全实现MultiDex支持,所以我的一些类不在正确的dex文件中。 为了解决这个问题,你不得不在defaultConfig块中设置multiDexEnabled = true 。 您还必须:

  1. 在你的依赖中包含compile 'com.android.support:multidex:1.0.1'
  2. 让您的应用程序类扩展MultiDexApplication而不仅仅是Application 。 或者,您可以在应用程序的MultiDex.install()中调用MultiDex.install()

有关更多详细信息,请参阅https://developer.android.com/tools/building/multidex.html

1)在默认的configuration中添加multiDexEnabled = true

2)在你的依赖关系中添加compile com.android.support:multidex:1.0.0

3) Application类扩展MultiDexApplication而不仅仅是Application

我通过删除multiDexEnabled = true来解决这个问题。

1)在build.gradle的defaultConfig中添加multiDexEnabled = true

2)你也必须包含compile'c​​om.android.support:multidex:1.0.1'

3)将以下内容添加到清单中的“应用程序”标签中:

机器人:名字= “android.support.multidex.MultiDexApplication”

与我一起工作,希望有所帮助

我也问题做了以下步骤后得到解决

1)在multiDexEnabled = true的defaultConfig中添加multiDexEnabled = true

2)你也必须包含compile com.android.support:multidex:1.0.1

3)将以下内容添加到清单中的“应用程序”标签中:

 android:name="android.support.multidex.MultiDexApplication" 

我得到了同样的问题,尝试了所有在StackOverflow上build议的解决scheme,但他们没有在我的情况下工作。
之后,我发现了一个由Java 8编译的库。所以,我也需要在我的项目中启用Java 8。

  android { //... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 

导致这个错误的原因有很多。 希望它有帮助。