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

Posted

技术标签:

【中文标题】Java 以非零退出值 2 完成 - Android Gradle【英文标题】:Java finished with non-zero exit value 2 - Android Gradle 【发布时间】:2015-06-27 16:02:47 【问题描述】:

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

同步:好的 制作项目:好的 清理:好的 运行:错误

错误:任务 ':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 结束

我的 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')

而且效果很好。

【问题讨论】:

@JaredBurrows 我的问题是我的应用程序编译了两次库..一个在“编译文件树”(编译所有库目录)和“编译****”上。跨度> 能否请您发表一个答案并将其标记为正确? @JaredBurrows 完成。谢谢 请查看我的帖子***.com/a/33387368/740372 我遇到了同样的错误,但我的 gradle 文件没有那么多编译。请帮忙。我发布了这个问题:***.com/questions/34558251/…我对 android 开发完全陌生。 【参考方案1】:

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

所以,如果你必须保留库和方法,那么你可以通过在 gradle 配置中声明来启用多 dex 支持。

defaultConfig         
    // Enabling multidex support.
    multiDexEnabled true

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

【讨论】:

很高兴,它帮助了你。 @大卫 非常感谢它帮助了我 然后重写启动类中的方法:@Override protected void attachBaseContext(Context base) super.attachBaseContext(base); MultiDex.install(this); 哇,效果很好。从没想过这可能是问题所在。 如果您想查看究竟是什么导致了错误,请尝试通过 gradle 终端构建您的项目,例如 ./gradlew assembleDebug --stacktrace --debug 。我在我的情况下看到了这个错误com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 【参考方案2】:

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

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

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

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

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

也包含在 OnCreate 方法中

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

【讨论】:

这是最好的解决方案,你应该只包含你实际使用的库。 为我工作!!将“compile 'com.google.android.gms:play-services:7.5.0'”更改为 compile “com.google.android.gms:play-services-identity:8.1.0” compile “com.google.android. gms:play-services-plus:8.1.0" 不错,另请参阅:developers.google.com/android/guides/setup - 提供各种独立库的列表。 @edsappfactory.com 我提到,使用和修改。【参考方案3】:

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

错误:任务 ':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 版本无关,所以不要把时间浪费在错误的方向上。 这是发生这种情况的两个主要原因

    您的相同库或 jar 文件包含多个位置,其中一些位置相互冲突。 您即将或已经超过 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

这会增加方法限制,但由于可能存在性能问题,这不是最好的做法 重要在所有运行 android multiDexEnabled true 到 defaultConfig 是不够的,这将导致意外行为和 NoClassDefFoundError。如何解决它描述here

【讨论】:

【参考方案4】:

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

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

【讨论】:

或相反:在 gradle 中评论 compile fileTree(dir: 'libs', include: ['*.jar'])。它帮助了我。 关于这个问题还有其他解决方案吗?我没有编译每个 jar 文件,而是使用了这一行 compile fileTree(dir: 'libs', include: ['*.jar']),但它仍然显示相同的错误。【参考方案5】:

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

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

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

【讨论】:

我试图添加slidingMenu类并从我的主要gradle中删除它对我有用。谢谢! :)【参考方案6】:

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

defaultConfig 
multiDexEnabled true

【讨论】:

【参考方案7】:

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

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

【讨论】:

我认为这是可行的,因为嵌入式 JDK 是 64 位的。我在 32 位机器上遇到了同样的问题。 这解决了我的 32 位机器上的问题。 echo $JAVA_HOME 路径 是的,我知道这与我的机器是 32 位有关。谢谢你,Zacharia -- 拯救了我的一天!【参考方案8】:

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

【讨论】:

不是几个..只是几个方法。 嗯,尝试构建以前版本的项目或删除未使用的库(如果可能)并重新构建 我也只有几个方法【参考方案9】:

如果您已经更新了您的 SDK 并且您还使用了 google-play-services,那么您需要注意依赖关系,因为与以下内容存在某种冲突:

按照以下内容: compile 'com.google.android.gms:play-services:+' 替换为 compile 'com.google.android.gms:play-services:6.5.87'

注意:这里的“6.5.87”是 google-play-service 版本。我希望它会有所帮助..

【讨论】:

【参考方案10】:

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

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

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

依赖

【讨论】:

【参考方案11】:

就我而言,问题在于我添加的新库(gradle 依赖项)依赖于其他一些依赖项,并且其中两个底层依赖项与我的构建脚本中其他库/依赖项的一些依赖项冲突/冲突.具体来说,我添加了 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 模块(您的项目中可能只有一个模块)的依赖关系(如果您在 Android 中创建了项目,我会使用为您创建的 gradle 包装器工作室/Intellij 理念)。在项目的根目录中运行此命令:

./gradlew :YOUR-MODULE-NAME:dependencies

在添加那些exclude 指令并重试运行后,我收到duplicate file 错误NOTICE.txt 被一些Apache 公共库(如日志记录和集合)使用。打包时我必须排除该文本文件。在我的 build.gradle 中,我添加了:

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

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

【讨论】:

【参考方案12】:

在我的情况下,当有 2 个或多个库冲突(相同的库但不同的版本)时,我会收到此错误。在依赖项块中检查您的应用 build.gradle。

【讨论】:

【参考方案13】:

肯定有两种选择:

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

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

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

    defaultConfig    
    
    multiDexEnabled true
    
    
    

【讨论】:

我都试过了,但是我有一个新的错误Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class,接下来我该怎么办? 试试这个***.com/questions/28168063/… 由于您的项目中有重复/相同的包而发生此错误【参考方案14】:

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

【讨论】:

【参考方案15】:

我的问题是除了拥有

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令 '/库/Java/JavaVirtualMachines/jdk1.X.X_XX.jdk/Contents/Home/bin/java'' 以非零退出值 2 结束

我也有这个痕迹:

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

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

【讨论】:

没错,我遇到了同样的问题,同样的类签名,幸运的是这是我的类,所以我重构了它。我在这里写了答案:***.com/a/35045501/3397345【参考方案16】:

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

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

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

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

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

您可能使用劣质电缆/有缺陷的电缆将您的设备连接到 PC,我更换了电缆,它对我有用。

【讨论】:

【参考方案19】:

此错误是因为使用了更多数量的库。在我的情况下,'compile'c​​om.google.android.gms:play-services-9.4.0' 导致了此错误。为避免此错误,请使用必要的库。例如如果你想在你的应用程序中使用地图。然后使用 编译 'com.google.android.gms:play-services-maps:9.4.0'。同时添加 google play services 依赖项仅指定所需的库。默认情况下它包括所有库。

【讨论】:

【参考方案20】:

在您的gradle.build 文件中,使用此

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

而且效果很好。

【讨论】:

【参考方案21】:

如果您想查看导致错误的确切原因,请尝试通过 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'

问题消失了

【讨论】:

【参考方案22】:

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

File > Project Structure > SDK Location 

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

/home/my_user/jdk1.8.0_101

改了这个之后,错误就消失了

【讨论】:

【参考方案23】:

为我工作:)

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

在 /usr/lib/jvm 中检查 java 8 文件夹名称

我正在使用 ubuntu

【讨论】:

以上是关于Java 以非零退出值 2 完成 - Android Gradle的主要内容,如果未能解决你的问题,请参考以下文章

异常:Gradle 任务 assembleDebug 失败,退出代码 1 以非零退出值 1 完成

构建新项目时出错 - aapt 以非零退出值 1 完成

gradle process 命令 java 以非零退出值 1 结束

:app:dexDebug ExecException 以非零退出值 2 结束

错误 Gradle Build C:\Program Files\Java\jdk1.7.0_79\bin\java.exe'' 以非零退出值 1 结束

以非零退出值结束