首页 文章

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

提问于
浏览
133

我在执行我的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结束

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

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

它工作正常 .

23 回答

  • 32

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

    So, If you have to keep libraries and methods, then you can enable multi dex support by declaring it in the gradle config.

    defaultConfig {        
        // Enabling multidex support.
        multiDexEnabled true
    }
    

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

  • 9

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

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

    导致超过65k的方法,所以删除它,gradle同步,清理项目,然后再次运行,然后停止此错误 . 我只需要 Map 和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();
    }
    
  • 0

    以防万一有人仍在努力解决这个问题并且不知道为什么会发生这种情况以及如何解决问题 . 实际上这个错误

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

    这会增加方法限制,但由于可能的性能问题而不是最好的事情 IMPORTANT 只添加 multiDexEnabled truedefaultConfig 实际上并不足以在运行android <5 Lollipop的所有设备上导致意外行为和 NoClassDefFoundError . 如何解决它描述here

  • 3

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

    它工作正常 . 不管怎么说,还是要谢谢你!我的错 .

  • 5

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

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

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

  • 6

    通过启用multiDex进行调试构建,我得到了解决 .

    defaultConfig {
    multiDexEnabled true
    }
    
  • 0

    我拒绝嵌入式JDK(32位)因为嵌入式 JDK is 64bit

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

  • 1

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

  • 1

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

  • 2

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

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

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

    依赖{}

  • 1

    在我的情况下,问题是新的库(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:你的MODULE-NAME:依赖

    在添加了那些 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(在这种情况下,您必须尝试查看依赖于冲突模块/依赖项的其他库是否能够使用较新的版本(通过在这些库的条目下排除旧版本的模块/依赖)) .

  • 0

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

  • 1

    有两种选择可以肯定:

    • 清理项目然后构建 .

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

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

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

  • 0

    我的问题是除了拥有

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

    我也有这样的痕迹:

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

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

  • 0

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

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

    但我只需要谷歌 Map ,所以我使它更具体,错误得到解决 .

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

  • 17

    在我的情况下问题是构建工具版本 23.0.0 rc3 并且我更改为22.0.1并且我的问题已修复 .

  • 93

    您可能正在使用低质量的电缆/缺陷电缆将设备连接到PC,我更换了电缆,它对我有用 .

  • 6

    这个错误是因为使用了更多的库 . 在我的情况下'compile'com.google.android.gms:play-services-9.4.0'导致了这个错误 . 要避免这个错误,请使用必要的库 . 例如,如果你想在您的应用中使用 Map . 然后使用编译'com.google.android.gms:play-services-maps:9.4.0' . 添加google play服务依赖项时,仅指定所需的库 . 默认情况下,它包含所有库 .

  • 0

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

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

    它工作正常 .

  • 204

    如果您想查看导致错误的确切原因,请尝试通过gradle终端构建项目,如 ./gradlew assembleDebug --stacktrace --debug . 我在我的案例中看到了以下错误 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

    当我试图将Google Map 集成到我的项目时,就发生了这种情况 . 为了解决它,我只是检查了我所包含的库

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

    我只是把它改成了

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

    问题消失了

  • 0

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

    File > Project Structure > SDK Location
    

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

    /home/my_user/jdk1.8.0_101
    

    更改此后,错误消失

  • 2

    WORKED FOR ME :)

    我将java升级到最新版本8之前它是7然后转到 OPEN MODULE SETTING right clicking on proj ect和 changed the jdk path to /usr/lib/jvm/java-8-oracle 安装新的java 8 . 并重新启动工作室

    报到/ usr / lib / jvm用于java 8文件夹名称

    我正在使用ubuntu
    enter image description here

相关问题