Android 4上安装Android Studio的NoClassDefFoundError

时间:2014-12-30 01:05:09

标签: android android-studio android-gradle

我正在将现有应用从Eclipse转换为Android Studio。但是,当我在运行4.x的设备上运行它时(我在模拟器上测试了几个版本),它立即崩溃了NoClassDefFoundError

我试过评论对它找不到的类的引用,但总会有另一个。据我所知,违规类总是

  1. 在我自己的代码中
  2. 内部班级(更新:经过更多调查,这个并不总是如此)
  3. 在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'])
    }
    

    导致麻烦的类的一些示例:

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

    出了什么问题,我该如何解决?

7 个答案:

答案 0 :(得分:116)

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

  1. 在您的依赖项中包含compile 'com.android.support:multidex:1.0.1'
  2. 让您的Application类扩展MultiDexApplication而不仅仅Application。或者,您可以在应用的MultiDex.install()中致电attachBaseContext()
  3. 有关详细信息,请参阅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