Android Studio`jdk1.7.0_51 \ bin \ java.exe''完成非零退出值2`

时间:2015-10-26 10:11:10

标签: android android-studio

当我尝试构建我的应用程序时,我突然遇到以下问题:

at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_51\bin\java.exe'' finished with non-zero exit value 2'

从阅读其他主题来看,它与超过65k的方法有关。但是我的应用程序不在那么近的地方,它仍然是一个小应用程序。我不确定是否包含gradle文件中包含的其他库。

这是我的gradle文件:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'

    defaultConfig {
        applicationId "com.domain.app"
        minSdkVersion 14
        targetSdkVersion 23
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile files('libs/jasypt-1.9.2.jar')
    apply plugin: 'com.google.gms.google-services'
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.google.code.gson:gson:2.3'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'me.dm7.barcodescanner:zbar:1.6.3'
    compile 'com.loopj.android:android-async-http:1.4.9'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.android.support:recyclerview-v7:23.1.0'
    compile 'com.android.support:cardview-v7:23.1.0'
    compile 'com.mobsandgeeks:android-saripaar:2.0.3'
    compile 'com.github.satyan:sugar:1.3.1'
    compile 'uk.co.ribot:easyadapter:1.5.0@aar'
    compile 'com.android.support:design:23.1.0'
}

如何确定我是否达到此限制,如果有,是否有办法查看哪个包含的库太大了?启用multiDexEnabled true还有什么缺点?

如果我必须诚实,我宁愿不启用multiDex,这个应用程序也不应该这么大。我宁愿修复问题的根源。

3 个答案:

答案 0 :(得分:1)

这种情况的发生是因为你有超过65k的方法超过了dex的容量。

您可以使用此lib检查是否有超过65k的方法https://github.com/KeepSafe/dexcount-gradle-plugin

如果你有超过65k并且你需要它们,那么你应该参加你的gradle

 defaultConfig {
        applicationId "com.domain.app"
        minSdkVersion 14
        targetSdkVersion 23
        multiDexEnabled true // Add this
    }

请查看此处的文档http://developer.android.com/tools/building/multidex.html

虽然如果您不需要所有播放服务方法,请使用您真正需要的方法,但您应该查看此文档以使用您只需要的内容。 https://developers.google.com/android/guides/setup

另外,正如@IntelliJAmiya所说,删除这个

 apply plugin: 'com.google.gms.google-services'

因为重复,您已经在使用

'com.google.android.gms:play-services:8.1.0'

答案 1 :(得分:1)

将此添加到您的构建广告

android {
.....
 multiDexEnabled true
}

并向依赖项添加multidex并尝试再次构建

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

编辑:在您的清单中添加mutltidex app:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

编辑2:或者,如果您有一个扩展应用程序的类,请在您班级的MultiDex.install(this)中添加attachBaseContext()(如果不存在则覆盖它)

答案 2 :(得分:0)

首先删除它

  1. apply plugin: 'com.google.gms.google-services'

    实际上你已经拨打compile 'com.google.android.gms:play-services:8.1.0'。所以不需要再打电话。

  2. 然后清理并重建

    最后

        dependencies {
        compile files('libs/jasypt-1.9.2.jar')
    
        compile 'com.android.support:support-v4:23.1.0'
        compile 'com.google.code.gson:gson:2.3'
        compile 'com.android.support:appcompat-v7:23.1.0'
        compile 'me.dm7.barcodescanner:zbar:1.6.3'
        compile 'com.loopj.android:android-async-http:1.4.9'
        compile 'com.google.android.gms:play-services:8.1.0'
        compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
        compile 'com.android.support:recyclerview-v7:23.1.0'
        compile 'com.android.support:cardview-v7:23.1.0'
        compile 'com.mobsandgeeks:android-saripaar:2.0.3'
        compile 'com.github.satyan:sugar:1.3.1'
        compile 'uk.co.ribot:easyadapter:1.5.0@aar'
        compile 'com.android.support:design:23.1.0'
    }
    

    修改1

    致电multiDexEnabled true

    看起来

    defaultConfig {
        applicationId "com.domain.app"
        minSdkVersion 14
        targetSdkVersion 23
         multiDexEnabled true
    }
    

    并添加此

    compile 'com.android.support:multidex:1.0.1'