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

Java finished with non-zero exit value 2 - Android Gradle

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

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_25\bin\java.exe'' finished with non-zero exit value 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')

而且效果很好。

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

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

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

如果您已经更新了您的 SDK 并且您还使用 google-play-services 那么您需要处理依赖关系,因为与 :

存在某种冲突

按照以下:编译'com.google.android.gms:play-services:+'替换为编译'com.google.android.gms:play-services:6.5.87'

注意:这里'6.5.87'是google-play-service版本。希望对你有帮助..

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

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

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

您可以阅读有关 multidex 支持和开发的更多信息apps with more than 65K methods here

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

I think it's conflicts of .jar file in your project.

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

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

dependencies {

}

就我而言,问题是我添加的新库(gradle 依赖项)依赖于其他一些依赖项,其中两个基础依赖项 conflicting/clashing 具有一些依赖项other libraries/dependencies 在我的构建脚本中。具体来说,我添加了 Apache Commons Validator(用于电子邮件验证),它的两个依赖项(Apache Commons Logging 和 Apache Commons Collections)与 Robolectric 使用的依赖项冲突(因为我的构建路径中存在相同库的不同版本)。所以我在添加新依赖项(Validator)时排除了那些冲突版本的依赖项(modules):

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

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

./gradlew :YOUR-MODULE-NAME:dependencies

在添加那些 exclude 指令并重试 运行 之后,我得到了 NOTICE.txtduplicate file 错误,一些 apache 通用库(如 Logging 和 Collections)使用了该错误.打包时我不得不排除该文本文件。在我的 build.gradle 中,我添加了:

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

事实证明,新库 (Validator) 可以与稍旧版本的 dependencies/modules 一起使用(它们已经被另一个库导入到我的构建路径中 (Robolectric)).这个特定库就是这种情况,但其他库可能正在使用最新的 API 底层依赖项(在这种情况下,您必须尝试查看是否有其他库依赖于冲突的 module/dependency能够使用较新的版本(通过在这些库的条目下排除旧版本的 module/dependecy)。

对我来说,问题是,我在 build.gradle

中放置了一个不必要的编译库代码
dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

导致超过 65k 个方法,因此将其删除,gradle 同步,清理项目,然后再次 运行 然后此错误停止。 我只需要地图和 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'
}

并创建一个扩展应用程序 class 的 class 并将此方法包含在 class..

@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,我的问题已解决。

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

Error:Execution failed for task ':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'' finished with non-zero exit value 2

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

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

第一种情况可以按如下方式修复: 找出您多次包含的依赖项。为了做到这一点 运行 在 android 工作室终端

中执行以下命令
gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

这将 return 除了您从 lib 文件夹中包含的 jar 文件之外的所有依赖项 尝试去掉标有星号 (*) 的重复项,这并不总是可行的,但在某些情况下你仍然可以这样做,在尝试排除多次包含的模块之后,你可以这样做

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

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

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

这增加了方法限制,但由于可能出现性能问题,这不是最好的做法 重要 仅将 multiDexEnabled true 添加到 defaultConfig 实际上在所有设备上是不够的 运行ning android <5 Lollipop 它将导致意外行为和 NoClassDefFoundError。描述了如何解决它 here

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

defaultConfig {
multiDexEnabled true
}

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

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

我删除了那个库,我可以 运行 这个项目没有任何问题。

您可能使用了劣质 cable/defected 电缆将您的设备连接到 PC,我更换了电缆并且对我有用。

有两种选择肯定有效:

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

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

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

    defaultConfig {   
    
    multiDexEnabled true
    
    }
    

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

我的问题是除了

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.X.X_XX.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2

我也有这个踪迹:

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mypackage/ClassX;

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

对我来说,我添加了整个 Playstore 依赖项

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

但我只需要 google 地图,所以我把它变得更具体,错误就解决了。

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

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

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

这个错误是因为使用了更多的libraries.in我的案例'编译'com.google.android.gms:play-services-9.4.0'导致这个error.To避免这个错误使用必要的libraries.for例子如果你想在 app.Then 使用中使用地图 编译 'com.google.android.gms:play-services-maps:9.4.0'。同时添加 google 播放服务依赖项指定所需的库 only.by 默认它包括所有库。

在你的 gradle.build 文件中,使用这个

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

而且效果很好。

如果您想查看究竟是什么导致了错误,请尝试通过 gradle 终端构建您的项目,就像这样 ./gradlew assembleDebug --stacktrace --debug 。我在我的案例中看到了以下错误 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

这发生在我试图将 Google 地图集成到我的项目中时。为了修复它,我只是检查了我包含的库

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,然后转到 打开模块设置 右键单击​​项目 将 jdk 路径更改为 /usr/lib/jvm/java-8-oracle 安装了新的 java 8。并重启工作室

在 /usr/lib/jvm 中签入 java 8 文件夹名称

我正在使用 ubuntu