Java完成非零退出值2 – Android Gradle
我得到这个错误执行我的Android应用程序(我清理它,然后build立它,但错误仍然存在)
- 同步:好的
- 制作项目:好的
- 清洁:好的
- 运行:错误
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''以非零的退出值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') }
编辑:我没有看到“编译文件树(目录:'库',包括:['* .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')
它工作正常。
这个问题很可能是由于Android超过了65K方法的限制。 这个问题可以通过清理项目来解决,也可以从build.gradle中的依赖关系中删除一些未使用的库和方法, 或者通过添加multidex支持来解决。
所以,如果你必须保持库和方法,那么你可以通过在gradleconfiguration中声明来支持多dex支持。
defaultConfig { // Enabling multidex support. multiDexEnabled true }
你可以在这里阅读更多有关multidex支持和开发超过65K方法的应用程序 。
对我来说问题是,我把一个不必要的complie库代码放在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'
嗨,人们,我再次遇到这个问题,这一次是因为更改构build工具版本,它真的需要我启用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' }
并创build一个扩展Application类的类,并在类中包含此方法..
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
也包括在OnCreate方法中
@Override public void onCreate() { MultiDex.install(this); super.onCreate(); }
以防万一,如果有人还在为此而苦苦挣扎,不知道为什么会发生这种情况,以及如何解决。 其实这个错误
错误:任务':app:dexDebug'的执行失败。 > com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'command'C:\ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe''完成非零退出值2
可能有很多原因会发生,但肯定不是与您的JDK版本有关,所以不要浪费您的时间在错误的方向。 这是发生这种情况的两个主要原因
- 你有相同的库或jar文件包括几个地方,其中一些相互冲突。
- 您即将或已经超过了65k的方法限制
第一种情况可以修复如下:找出你包含多次的依赖关系。 为了做到这一点在android studioterminal运行下面的命令
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' }
对于超出方法限制的第二种情况,build议尝试通过删除包含的库(注意听起来像第一个解决scheme)来尽量减less它(如果没有办法做到这一点)将multiDexEnabled true添加到您的defaultConfig
defaultConfig { ... ... multiDexEnabled true }
这增加了方法的限制,但它并不是最好的事情,因为可能的性能问题重要添加multiDexEnabled true
的defaultConfig
是不够的,实际上在所有设备上运行android <5的棒棒糖将导致意外的行为和NoClassDefFoundError
。 这里介绍如何解决这个问题
编译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')
它工作正常。 不pipe怎么说,还是要谢谢你! 我的错。
我有同样的问题,我修复了删除不必要的库
compile fileTree(dir: 'libs', include: ['*.jar'])
我删除了该库,我可以运行该项目没有任何问题。
通过为debugging版本启用multiDex解决了我的问题。
defaultConfig { multiDexEnabled true }
我拒绝embedded式JDK(32位),因为embedded式JDK是64位
右键单击您的项目 – > 打开模块设置 – > SDK位置 – >取消选中使用embedded式JDK,然后设置您的JDKpath,例如在Ubuntu / usr / lib / jvm / java-8-openjdk-i386
可能的问题:你已经超过了dex 65k方法的限制,可能是你在问题发生之前添加了一些库或几个方法?
如果您已经更新了您的SDK,并且您还使用了google-play-services,那么您需要关注依赖关系,因为存在以下某种冲突:
请按照以下步骤编译:com.google.android.gms:play-services:+'Replace by compile'com.google.android.gms:play-services:6.5.87'
注意:这里'6.5.87'是谷歌播放服务版本。 我希望这会帮助..
我认为这是你的项目中.jar文件的冲突。
我已经从libs文件夹中删除了android-support-v4.jar,并且工作正常!
如果你的项目出错,请检查你的build.gradle文件
依赖{
}
在我的情况下,问题是我添加的新库(gradle dependency)依赖于其他一些依赖关系,其中两个基础依赖关系在我的构build脚本中与其他库/依赖关系的一些依赖关系冲突/冲突。 具体来说,我添加了Apache Commons Validator
(用于电子邮件validation),并且它的两个依赖项(Apache Commons Logging
和Apache Commons Collections
)与Robolectric使用的依赖项相冲突(因为我的构buildpath中存在不同版本的相同库)。 所以当我添加新的依赖关系( Validator
)的时候,我排除了那些相互冲突的版本( modules
):
compile ('commons-validator:commons-validator:1.4.1') { exclude module: 'commons-logging' exclude module: 'commons-collections' }
你可以使用下面的gradle命令(你可能只有一个模块在你的项目中)看到你的gradle模块的依赖关系(如果你在Android Studio / Intellij中创build了你的项目,我使用为你创build的gradle包装器理念)。 在你的项目的根目录下运行这个命令:
./gradlew:YOUR-MODULE-NAME:依赖关系
添加这些exclude
指令NOTICE.txt
试运行后,我得到了一些duplicate file
错误的NOTICE.txt
由一些apache公共库,如日志logging和集合使用。 打包时,我不得不排除该文本文件。 在我的build.gradle,我补充说:
packagingOptions { exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' exclude 'META-INF/NOTICE.txt' }
事实certificate,新的库( Validator
)可以使用稍旧版本的依赖项/模块(已经被另一个库(Robolectric)导入到我的构buildpath中)。 这个特定的库就是这种情况,但其他库可能使用最新的底层依赖的API(在这种情况下,您必须尝试查看依赖冲突的模块/依赖关系的其他库是否能够使用更新的版本(通过在这些库的条目下排除旧版本的模块/依赖))。
有两种方法可以肯定地工作:
- 清理你的项目,然后build立。
如果上述方法不起作用,请尝试下一步。
-
将以下内容添加到应用程序级别的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''以非零的退出值2结束
我也有这个痕迹:
未捕获的翻译错误:java.lang.IllegalArgumentException:已经添加:Lcom / mypackage / ClassX;
问题是我在两个不同的库中添加了同一个类。 从其中一个库中删除类/ jar文件,项目运行正常
对我来说,我join了整个Playstore的依赖关系
编译“com.google.android.gms:play-services:8.4.0”
但我只需要谷歌地图,所以我做了更具体的错误已解决。
编译'com.google.android.gms:play-services-maps:8.4.0'
在我的情况下,当有2个或更多的库冲突(相同的库,但不同的版本)时,我得到了这个错误。 检查您的应用程序build.gradle在依赖关系块。
在我的情况下,问题是构build工具版本是23.0.0 RC3 ,我改为22.0.1和我的问题修复。
您可能正在使用低质量的有线/有缺陷的线缆将您的设备连接到PC,我更换了线缆,并为我工作。
这个错误是因为使用了更多数量的库。在我的情况'compile'com.google.android.gms:play-services-9.4.0'导致了这个错误。为了避免这个错误使用必要的库。例如,如果你想在您的应用程序中使用地图。然后使用compile'com.google.android.gms:play-services-maps:9.4.0'。同时添加google play服务依赖项仅指定所需的库。默认情况下它包含所有库。
在你的gradle.build
文件中,使用这个
"compile fileTree(dir: 'libs', include: ['*.jar'])"
它工作正常。
如果你想看看到底是什么导致了错误,可以尝试通过gradleterminal来构build你的项目,像这样./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
后,我遇到了同样的错误。 我的问题是,在这个过程中,我的位置被改变成了一个无效的path(我想知道为什么会发生这种情况……让我浪费时间)。 通过这样做来修复它:
File > Project Structure > SDK Location
取消选中Use embedded JDK
选项,该选项指向一个旧的JDK安装,并select正确的:
/home/my_user/jdk1.8.0_101
改变这个之后,错误消失了
为我工作:)
我升级到最新的版本8以前是7,然后去打开模块设置右键单击项目,并更改为新的Java 8安装的/ usr / lib / jvm / java-8-oracle的jdkpath 。 然后重新开始工作室
检查/ usr / lib / jvm中的java 8文件夹名称
我正在使用Ubuntu的