Java 完成了非零退出值2-Android Gradle

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

  • 同步: OK
  • 制作项目: 好的
  • 干净: 好的
  • 错误

错误: 任务执行失败“ : app: dexDebug”. com.android.ide.common.Process. ProcessException: org.gradle.Process.Internal. ExecException: Process‘ command‘ C: Program Files Java jdk1.7.0 _ 25 bin Java.exe”以非零退出值2结束

我的档案:

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')
}

编辑: 我没有看到“编译 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')

而且效果很好。

136070 次浏览

可能的问题: 您已经超过了 dex 65k 方法的限制,可能是您在问题发生之前添加了一些库或多个方法?

我不知道(那时) 编译 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')

它工作得很好。不管怎样,谢谢! 我的错。

如果你已经更新了你的 SDK 并且你也在使用 google play-services,那么你需要考虑一下这个依赖性,因为有一些冲突:

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

注意: 这里的“6.5.87”是谷歌游戏服务版本。我希望它会有所帮助..。

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

因此,如果必须保留库和方法,那么可以通过在 gradle 配置中声明 multidex 支持。

defaultConfig {
// Enabling multidex support.
multiDexEnabled true
}

您可以阅读更多关于 multidex 支持和开发 方法超过65K 的应用程序的内容。

在我的例子中,当有2个或更多的库冲突(相同的库但是版本不同)时,我得到了这个错误。在依赖块中检查应用程序 build.gradle。

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

我已经从 libs 文件夹中删除了 android-support-v4.jar 并且它能正常工作! ! !

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

附属事项{

}

在我的例子中,问题在于我添加的新库(级别依赖)依赖于其他一些依赖项,其中两个底层依赖项与构建脚本中其他库/依赖项的一些依赖项冲突/冲突。具体来说,我添加了 Apache Commons Validator(用于电子邮件验证) ,它的两个依赖项(Apache Commons Logging和 Apache Commons Collections)与 Robolecric 使用的依赖项存在冲突(因为在我的构建路径中存在相同库的不同版本)。因此,在添加新的依赖项(Validator)时,我排除了那些相互冲突的依赖项版本(modules) :

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

你可以使用下面的 gradle 命令来查看你的 gradle 模块(你的项目中可能只有一个模块)的依赖关系(我使用了在 Android Studio/Intellij Ideas 中创建项目时为你创建的 gradle 包装器)。在项目的根目录下运行这个命令:

./gradlew: Your-Module-Name: Dependences

在添加了这些 exclude指令并重新尝试运行之后,我得到了 NOTICE.txt的一个 duplicate file错误,这个错误被一些 apache 公共库(如 Logging 和 Collection)所使用。打包时我不得不排除那个文本文件。在我的 build.gradle 中,我补充道:

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

事实证明,新的库(Validator)可以使用稍微老一点的依赖项/模块版本(这些依赖项/模块已经由另一个库(Robolecric)导入到我的构建路径中)。这个特定的库就是这种情况,但是其他库可能使用底层依赖项的最新 API (在这种情况下,你必须尝试看看依赖于冲突的模块/依赖项的其他库是否能够与新版本一起工作(通过排除这些库条目下的模块/依赖项的旧版本)。

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

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。.所以我加了这些应用程序的 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();
}

在我的情况下,问题是构建工具版本,这是 23.0.0 rc3和我改为22.0.1和我的问题修复。

只是以防万一,如果有人仍然挣扎与此,并不知道为什么会发生这种情况,以及如何解决。事实上这个错误

错误: 任务执行失败“ : app: dexDebug”. > com.android.ide.common.Process. ProcessException: org.gradle.Process.Internal. ExecException: Process‘ command‘ C: Program Files Java jdkx.x.x _ xx bin Java.exe”以非零退出值2结束

可能有很多原因,但肯定与 JDK 版本无关,所以不要把时间浪费在错误的方向上。 这是发生这种情况的两个主要原因

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

第一种情况可以确定如下: 找出您多次包含的依赖项。为了做到这一点,运行下面的命令在 android 工作室终端

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'
}

对于超过方法限制的第二种情况,建议通过删除包含的库(注意,听起来像第一种解决方案)来最小化它,如果没有办法做到这一点,则将 multiDexEnable 添加到 defaultConfig

defaultConfig {
...
...
multiDexEnabled true
}

这增加了方法限制,但是由于可能的性能问题,这不是最好的做法 重要 在所有运行 android < 5棒棒糖的设备上仅仅添加 multiDexEnabled truedefaultConfig是不够的,它会导致意外的行为和 NoClassDefFoundError。如何解决它是描述 给你

通过启用 multiDex 进行调试构建,我的问题得到了解决。

defaultConfig {
multiDexEnabled true
}

我也有同样的问题,所以我修正了删除不必要的库的问题

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

我删除了那个库,我就可以毫无问题地运行这个项目了。

您可能使用低质量的电缆/缺陷电缆连接您的设备到个人电脑,我更换了电缆,它为我工作。

有两种选择肯定会奏效:

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

如果上述方法不起作用,请尝试下一个。

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

    defaultConfig {
    
    
    multiDexEnabled true
    
    
    }
    

将我的 JavaSDK 更新到最新版本的 1.7.0_79,并在 Project Structure下更新 SDK Location,为我解决了这个问题。

我的问题是除了

转换异常: 异常: 异常: Process‘ command ’/Library/Java/JavaVirtualMachines/jdk1.X. X _ XX. jdk/content/Home/bin/java” 以非零退出值2结束

我也发现了这个痕迹:

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

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

对我来说,我添加了整个 playstore 的依赖关系

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

但是我只需要谷歌地图,所以我使它更具体和错误得到解决。

编译‘ com.google.android.gms: play-services-map: 8.4.0’

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

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

这个错误是因为在我的例子中使用了更多的 library. (编译“ com.google.android.gms: play-services-9.4.0”)导致了这个错误。为了避免这个错误,使用必要的 library. (例如,如果你想在你的应用中使用 Maps)。那就用 编译‘ com.google.android.gms: play-services-map: 9.4.0’. 在添加 google play 服务依赖项时,只指定所需的库. 默认情况下,它包含所有库。

gradle.build文件中,使用这个

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

而且效果很好。

如果你想知道到底是什么导致了这个错误,尝试通过梯度终端来构建你的项目,就像这个 ./gradlew assembleDebug --stacktrace --debug。我在案例 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536中看到了以下错误

这发生在我试图将谷歌地图集成到我的项目中的时候。为了解决这个问题,我只是检查了包含的库

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

我只是把它改成了

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

问题就解决了

在将项目转换为 Kotlin之后,我也出现了同样的错误。我的问题是,我的 jre 位置在过程中被更改为无效的路径(我不知道为什么会发生这种情况... 让我浪费时间)。通过这样做修正了它:

File > Project Structure > SDK Location

取消选中指向旧 JDK 安装的 Use embedded JDK选项,并选择了正确的选项:

/home/my_user/jdk1.8.0_101

更改此属性后,错误消失

对我有效:)

我把 java 升级到了最新的版本8,之前是7,然后转到 右键单击 proj 打开模块设置ect 和 将 jdk 路径更改为/usr/lib/jvm/java-8-oracle,安装了新的 java 8。重新启动摄影棚

检入/usr/lib/jvm 获取 java 8文件夹名

我在用 ubuntuenter image description here