Java用非零退出值2结束-Android Gradle


135

我在执行我的Android应用程序时遇到此错误(我先清理了它,然后构建了它,但该错误仍然存​​在)

  • 同步:确定
  • 制作项目:确定
  • 清洁:可以
  • 运行:错误

错误:任务':app:dexDebug'的执行失败.com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'command'C:\ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe''的退出值非零2

我的gradle文件:

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

编辑:我没有看到“ compile fileTree(dir:'libs',include:['* .jar'])”,它正在编译两次我的库,所以我只发表评论:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

而且效果很好。


2
@JaredBurrows在我的情况下,问题是我的应用程序在“ compile fileTree”(编译所有libs目录)和“ compile ****”上编译了两次库..。
Maverick.pe

您能否发布答案并将其标记为正确?
Jared Burrows 2015年

@JaredBurrows完成。谢谢
Maverick.pe


我遇到了同样的错误,但是我的gradle文件没有太多的编译。请帮忙。我发布了这个问题: stackoverflow.com/questions/34558251/… 我是android开发的新手。
Ayusch '16

Answers:


205

此问题很可能是由于超出了Android规定的65K方法dex限制。可以通过清理项目并从build.gradle中的依赖项中删除一些未使用的库和方法来解决此问题,或者通过添加multidex支持来解决此问题。

因此,如果必须保留库和方法,则可以通过在gradle配置中声明它来启用多dex支持。

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

您可以在此处阅读更多有关multidex支持和使用超过65K方法开发应用程序的信息


很高兴,它对您有所帮助。@David
minhazur

2
非常感谢,它对我有帮助
Aayushi

4
然后在启动类中重写该方法:@Override protected void attachBaseContext(Context base){super.attachBaseContext(base); MultiDex.install(this); }
Gent Berani 2015年

哇,效果很好。从来没有想过这可能是问题所在。
Neela

如果您想查看导致错误的确切原因,请尝试通过gradle终端构建项目,例如./gradlew assembleDebug --stacktrace --debug。我已经看到了这个错误com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

对我来说,问题是,我在build.gradle中放入了不必要的complie库代码

dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

这导致了超过65k的方法,因此将其删除,逐步同步,清理项目,然后再次运行,然后此错误停止。我只需要地图和gcm,所以我把这些线和同步的项目

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

大家好,我又遇到了这个问题,这是因为更改了构建工具的版本,确实需要启用multidex..so,所以我将这些添加到了我的应用程序的build.gradle文件中。

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

并创建一个扩展Application类的类,并将此方法包含在类中。

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

也包括在OnCreate方法中

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

2
这是最好的解决方案,您应该只包括实际使用的库。
Roisgoen 2015年

2
为我工作!更改“ compile'c​​om.google.android.gms:play-services:7.5.0'”以编译“ com.google.android.gms:play-services-identity:8.1.0”,然后编译“ com.google.android。 gms:play-services-plus:8.1.0“
奥斯卡·卡尔德隆

1
不错的一个,也可以参考:developers.google.com/android/guides/setup-提供各种单独库的列表。
Ed Manners 2015年

@ edsappfactory.com我提到了,并进行了修改。
阿米特·图姆库

32

以防万一有人仍在为此奋斗并且不知道为什么会这样以及如何解决。其实这个错误

错误:任务':app:dexDebug'的执行失败。> com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'命令'C:\ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe''完成非零退出值2

发生的原因可能很多,但肯定与您的JDK版本无关,因此不要浪费时间。这是发生这种情况的两个主要原因

  1. 您具有包含多个位置的同一个库或jar文件,其中一些相互冲突。
  2. 您即将或已经超过65k方法限制

第一种情况可以解决如下:查找多次包含哪些依赖项。为了做到这一点,请在android studio终端中运行以下命令

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

这将返回所有依赖关系,但是您从lib文件夹中包含的jar文件会尝试消除标有星号(*)的重复项,这并非总是可能的,但是在某些情况下您仍然可以做到,在此之后,您尝试排除那些包含很多次,您可以这样做

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

对于第二种情况,当您超出方法限制时,建议通过尝试删除包含的库(请注意第一个解决方案的声音)来尝试将其最小化,如果没有办法,则将multiDexEnabled true添加到defaultConfig中

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

这种方法增加限制,但它是不是因为可能的性能问题,最好的事情 重要仅添加multiDexEnabled truedefaultConfig是远远不够的,其实上运行的所有设备Android <5棒棒堂会导致意外的行为和NoClassDefFoundError。如何解决它在这里描述


18

我当时还不知道“ compile fileTree(dir:'libs',include:['* .jar'])”会编译所有在libs文件夹中具有jar扩展名的文件,所以我只评论(或删除)此文件行:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

而且效果很好。不管怎么说,还是要谢谢你!我的错。


5
或相反:compile fileTree(dir: 'libs', include: ['*.jar'])在gradle中评论。它帮助了我。
Tomasz Mularczyk

关于此问题还有其他解决方案吗?我没有编译每个jar文件,而是只使用了这一行,compile fileTree(dir: 'libs', include: ['*.jar'])但是它仍然显示相同的错误。
Kairi San

9

我遇到了同样的问题,并修复了删除不必要的库的问题

compile fileTree(dir: 'libs', include: ['*.jar'])

我删除了该库,可以毫无问题地运行该项目。


我试图添加滑动菜单类,并将其从我的主要gradle中删除对我来说很有效。谢谢!:)
卢卡斯·塞尼察

6

通过为调试版本启用multiDex解决了我的问题。

defaultConfig {
multiDexEnabled true
}

6

我拒绝嵌入式JDK(32位),因为嵌入式JDK是64位

右键单击您的项目-> 打开模块设置 -> SDK位置 ->取消选中使用嵌入式JDk,然后设置您的JDK路径,例如在Ubuntu / usr / lib / jvm / java-8-openjdk-i386中


1
我认为这可行,因为嵌入式JDK是64位的。我在32位计算机上遇到了同样的问题。
卢卡斯·诺瓦克

这解决了我的32位计算机上的问题。echo $JAVA_HOME路径
SANBI

是的,我知道这与我的32位计算机有关。谢谢Zacharia-拯救了我的一天!
Ilonpilaaja


3

如果您已经更新了SDK,并且还使用了google-play-services,则需要注意相关性,因为与conflics有一些冲突:

请遵循以下步骤:编译'com.google.android.gms:play-services:+'替换为编译'com.google.android.gms:play-services:6.5.87'

注意:这里的“ 6.5.87”是Google Play服务版本。希望对您有所帮助。


2

我认为这是您项目中.jar文件的冲突。

我已经从libs文件夹中删除了android-support-v4.jar及其工作!

如果您的项目出现错误,请检入build.gradle文件

依赖项{

}


2

在我的情况下,问题是我添加的新库(渐变依赖项)依赖于某些其他依赖项,而这些基础依赖项中的两个与构建脚本中的其他库/依赖项的某些依赖项发生冲突/冲突。具体来说,我添加了Apache Commons Validator(用于电子邮件验证),它的两个依赖项(Apache Commons Logging和Apache Commons Collections)与Robolectric使用的依赖项冲突(因为在我的构建路径中存在相同库的不同版本)。因此,modules在添加新的依赖项()时,我排除了那些相互冲突的依赖项版本(Validator):

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

您可以使用以下gradle命令(如果您在Android Studio / Intellij中创建了项目,则使用为您创建的gradle包装器)查看gradle模块的依赖性(您的项目中可能只有一个模块)理念)。在项目的根目录中运行以下命令:

./gradlew:您的模块名称:依赖

添加exclude完这些指令并重试运行后,我得到了一个duplicate file错误,NOTICE.txt该错误已被诸如日志记录和集合之类的一些Apache Commons库所使用。包装时我不得不排除该文本文件。在我的build.gradle中,我添加了:

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

事实证明,新库(Validator)可以使用其依赖项/模块的稍旧版本(其他库(Robolectric)已将其导入到我的构建路径中)。这种特定的库就是这种情况,但是其他库可能正在使用最新的基础依赖关系API(在这种情况下,您必须尝试查看依赖冲突模块/依赖关系的其他库是否能够与较新的版本(通过在这些库的条目下排除模块/依赖性的较旧版本)。


1

就我而言,当有两个或多个库冲突(相同的库但版本不同)时,出现此错误。在依赖项块中检查您的应用程序build.gradle。


1

有两种选择可以肯定地起作用:

  1. 清理您的项目,然后构建。

如果上述方法无效,请尝试下一种方法。

  1. 在应用程序级别将以下内容添加到build.gradle文件

    defaultConfig {   
    
    multiDexEnabled true
    
    }

我都尝试过,但出现新错误Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class,下一步该怎么办?
Kairi San


由于您的项目中存在重复/相同的软件包,因此会发生此错误
Udit Kapahi 2016年

1

将我的Java SDK更新到最新版本1.7.0_79并更新SDK Locationunder Project Structure解决了我的问题。


1

我的问题是,除了拥有

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'command'/Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java''完成,返回值非零2

我也有这样的痕迹:

未捕获的翻译错误:java.lang.IllegalArgumentException:已添加:Lcom / mypackage / ClassX;

问题是我在两个不同的库中添加了相同的类。从其中一个库中删除class / jar文件,项目可以正常运行


确实,我遇到了相同的问题,相同的类签名,幸运的是,这是我的类,因此我对其进行了重构。我在这里写下了答案:stackoverflow.com/a/35045501/3397345
Davideas

1

对我来说,我正在添加整个playstore依赖项

编译'com.google.android.gms:play-services:8.4.0'

但是我只需要google map,所以我使它更具体,错误已得到解决。

编译'com.google.android.gms:play-services-maps:8.4.0'


0

在我的情况下,问题是构建工具版本为23.0.0 rc3,我更改为22.0.1,并且解决了我的问题。



0

此错误是由于使用了更多的库造成的。在我的案例中,'compile'c​​om.google.android.gms:play-services-9.4.0'导致了此错误。为避免此错误,请使用必要的库。例如,如果需要即可在您的应用中使用地图。然后使用编译“ com.google.android.gms:play-services-maps:9.4.0”。同时添加google play服务依赖项时,请仅指定所需的库。默认情况下,它包括所有库。



0

如果您想查看导致错误的确切原因,请尝试通过gradle终端构建项目,例如./gradlew assembleDebug --stacktrace --debug。我已经看到以下错误com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

这是在我尝试将Google Maps集成到我的项目中时发生的。为了解决这个问题,我只检查了我包含的库

compile 'com.google.android.gms:play-services:9.8.0'

我只是将其更改为

compile 'com.google.android.gms:play-services-maps:9.8.0'

问题不见了


0

将项目转换为之后,我遇到了相同的错误Kotlin。我的问题是,在此过程中,我的jre位置更改为无效路径(我想知道为什么会这样……使我浪费时间)。通过执行以下操作修复了该问题:

File > Project Structure > SDK Location 

取消选中该Use embedded JDK选项(该选项指向旧的JDK安装),然后选择正确的选项:

/home/my_user/jdk1.8.0_101

更改后,错误消失了


0

为我工作:)

我将Java升级到了最新的版本8,以前是7,然后右键单击项目转到OPEN MODULE SETTING并将jdk路径更改为/ usr / lib / jvm / java-8-oracle,安装了新的Java 8。并重启工作室

检入/ usr / lib / jvm中的Java 8文件夹名称

我正在使用ubuntu在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.