在Android 4上使用Android Studio的NoClassDefFoundError
我正在将现有的应用程序从Eclipse转换到Android Studio。 然而,当我在运行4.x的设备(我已经在仿真器上testing了几个版本)上运行它时,它立即崩溃了一个NoClassDefFoundError
。
我已经试过评论它找不到的类的引用,但总是有另一个。 可以说,犯罪阶级总是这样
- 在我自己的代码中
- 一个内部类( 更新:更多的调查,这个并不总是如此)
一切工作正常的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
。 您还必须:
- 在你的依赖中包含
compile 'com.android.support:multidex:1.0.1'
- 让您的应用程序类扩展
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'com.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 } }
导致这个错误的原因有很多。 希望它有帮助。