ChatGPT解决这个技术问题 Extra ChatGPT

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

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

同步:好的

制作项目:好的

清洁:好的

运行:错误

错误:任务':app:dexDebug'.com.android.ide.common.process.ProcessException的执行失败:org.gradle.process.internal.ExecException:进程'命令'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')
}

编辑:我没有看到“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 完成。谢谢
请在此处查看我的帖子stackoverflow.com/a/33387368/740372
我有同样的错误,但我的 gradle 文件没有那么多编译。请帮忙。我发布了这个问题:stackoverflow.com/questions/34558251/…我对 android 开发完全陌生。

C
C--

这个问题很可能是由于超过了 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 中看到了这个错误
A
Amit Tumkur

对我来说,问题是,我在 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'
}

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

@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 我提到,使用和修改。
C
Community

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

错误:任务“: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 <5 Lollipop 的设备上仅添加 multiDexEnabled truedefaultConfig 是不够的将导致意外行为和NoClassDefFoundError。描述了如何解决它here


M
Maverick.pe

我不知道(到那时)“编译fileTree(dir:'libs',包括:['*.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']),但它仍然显示相同的错误。
P
Pang

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

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

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


我试图添加slidingMenu 类并从我的主gradle 中删除它对我有用。谢谢! :)
A
Armin

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

defaultConfig {
multiDexEnabled true
}

u
ugali soft

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

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


我认为这很有效,因为嵌入式 JDK 是 64 位的。我在我的 32 位机器上遇到了同样的问题。
这解决了我的 32 位机器上的问题。 echo $JAVA_HOME 用于路径
是的,我知道这与我的机器是 32 位有关。谢谢你,Zacharia——拯救了我的一天!
A
Artem Zinnatullin

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


不是几个..只是几个方法。
嗯,如果可能的话,尝试构建以前版本的项目或删除未使用的库并重新构建
我也只有几个方法
M
Maddy

如果您已经更新了 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 版本。我希望它会有所帮助..


S
Samir Mangroliya

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

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

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

依赖{ }


J
Javad

就我而言,问题是我添加的新库(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 Studio/Intellij 中创建了项目,我将使用为您创建的 gradle 包装器主意)。在项目的根目录中运行此命令:

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


P
Phuc Tran

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


U
Udit Kapahi

有两种选择肯定会起作用:

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

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

将以下内容添加到应用级别 defaultConfig { multiDexEnabled true } 的 build.gradle 文件中


我都试过了,但是我有一个新的错误Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class,接下来我该怎么办?
由于项目中的重复/相同包而发生此错误
T
TheIT

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


m
mromer

我的问题是,除了拥有

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文件,项目正常运行


没错,我遇到了同样的问题,同样的类签名,幸运的是这是我的类,所以我重构了它。我在这里写了答案:stackoverflow.com/a/35045501/3397345
A
Ajji

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

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

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

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


m
max

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


M
Mushtaq Jameel

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


R
Rajesh.k

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


n
noufalcep

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

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

它工作正常。


N
NecipAllef

如果您想查看究竟是什么导致了错误,请尝试通过 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'

问题消失了


v
voghDev

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

File > Project Structure > SDK Location 

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

/home/my_user/jdk1.8.0_101

更改后,错误消失了


j
jayant singh

为我工作:)

我将 java 升级到最新版本 8,之前它是 7,然后转到打开模块设置,右键单击项目并将 jdk 路径更改为 /usr/lib/jvm/java-8-oracle,安装新的 java 8。并重启工作室

签入 /usr/lib/jvm 以获取 java 8 文件夹名称

https://i.stack.imgur.com/YfKPW.png