我正在将现有应用从Eclipse转换为Android Studio。但是,当我在运行4.x的设备上运行它时(我在模拟器上测试了几个版本),它立即崩溃了NoClassDefFoundError
。
我试过评论对它找不到的类的引用,但总会有另一个。据我所知,违规类总是
在5.0.1模拟器上一切正常(我没有要测试的设备)。我的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'])
}
导致麻烦的类的一些示例:
Parcelable.CREATOR
实现出了什么问题,我该如何解决?
答案 0 :(得分:116)
我没有完全实现MultiDex支持,所以我的一些类不在正确的dex文件中。要解决此问题,您必须做的不仅仅是在multiDexEnabled = true
块中设置defaultConfig
。你还必须:
compile 'com.android.support:multidex:1.0.1'
MultiDexApplication
而不仅仅Application
。或者,您可以在应用的MultiDex.install()
中致电attachBaseContext()
。有关详细信息,请参阅https://developer.android.com/tools/building/multidex.html。
答案 1 :(得分:10)
1)在默认配置
中添加multiDexEnabled = true
2)在依赖项中添加编译com.android.support:multidex:1.0.0
3)Application
类扩展MultiDexApplication
而非Application
答案 2 :(得分:0)
我在我的案例中删除multiDexEnabled = true
解决了这个问题。
答案 3 :(得分:0)
1)在build.gradle的defaultConfig中添加 multiDexEnabled = true 。
2)你还必须包括编译'com.android.support:multidex:1.0.1'
3)将以下内容添加到清单中的“application”标签:
<强>机器人:名称= “android.support.multidex.MultiDexApplication”强>
与我合作,希望得到帮助
答案 4 :(得分:0)
执行以下步骤后,我也会解决问题
1)在build.gradle的defaultConfig中添加multiDexEnabled = true
。
2)您还必须包括编译com.android.support:multidex:1.0.1
3)将以下内容添加到清单中的“application”标签:
android:name="android.support.multidex.MultiDexApplication"
答案 5 :(得分:0)
我遇到了同样的问题,尝试了StackOverflow上建议的所有解决方案,但它们在我的情况下不起作用 之后我发现了Java 8编译的库之一。所以,我也需要在我的项目中启用Java 8。
android {
//...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
导致此错误的原因有很多。希望它有所帮助。
答案 6 :(得分:0)
就我而言,Kotlin forEach导致异常。 更多信息:java.lang.NoClassDefFoundError $$inlined$forEach$lambda$1 in Kotlin