1

试图让 retrolambda 在我的项目中工作时遇到大问题。那里有很多性问题和解决方案,但我没有发现任何不诉诸将multiDexEnabled标志添加到成绩文件中的方法。

我收到以下错误。

错误:任务':mobile:dexDebug'的执行失败。com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command'/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' 完成非零退出值 2

为了解决这个问题,我可以添加multiDexEnabled true并且这可以工作,但是它也会在我的构建时间上增加 1 分钟,这对于开发来说是不可接受的。

还有其他方法还是我不应该使用 Retrolambda?

编辑添加了 build.grade 代码。

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "com.myapplication"
    multiDexEnabled true
    minSdkVersion 11
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

buildscript {
repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    classpath 'me.tatarka:gradle-retrolambda:3.2.0'
}
}
repositories {
    mavenCentral()
}

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

compile 'com.google.android.gms:play-services-maps:7.5.0'
compile 'com.google.android.gms:play-services-wearable:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:support-v4:22.2.1'
compile 'com.android.support:design:22.2.1'
compile 'com.android.support:cardview-v7:22.2.1'
compile 'com.android.support:recyclerview-v7:22.2.1'

compile 'com.android.support:support-annotations:22.2.1'

compile 'com.jakewharton:butterknife:7.0.1'
compile 'joda-time:joda-time:2.7'
/*Graphs*/
compile 'com.androidplot:androidplot-core:0.6.1'
/*Parse*/
compile project(':ParseLoginUI')

/*Images*/
compile 'com.squareup.picasso:picasso:2.3.3'
compile 'com.makeramen:roundedimageview:2.1.0' // https://github.com/vinc3m1/RoundedImageView
compile 'io.reactivex:rxandroid:0.25.0'
}

编辑将我的 JDK 版本更改为 1.7 错误后

错误:任务“:activity-manager:compileDebugJava”执行失败。

使用 java 5、6 或 7 运行 gradle 时,必须使用属性 retrolambda.jdk 或环境变量 JAVA8_HOME 将路径设置为 jdk8

因此,在我的 .bash_profile 中,我像这样设置环境变量:

export JAVA_HOME=$(/usr/libexec/java_home)
export JAVA8_HOME=$(/usr/libexec/java_home)
export JAVA7_HOME=$(/usr/libexec/java_home -v 1.7)

现在,当我在终端中执行以下操作时,echo JAVA8_HOME它会找到正确的路径,但是我的 Gradle 仍然没有找到它。我在我的成绩文件中像这样测试它。

println("***************** ---------- *******************")
    println("JAVA_HOME: " + System.getenv("JAVA_HOME"))
    println("JAVA7_HOME: " + System.getenv("JAVA7_HOME"))
    println("JAVA8_HOME: " + System.getenv("JAVA8_HOME"))
    println("***************** ---------- *******************")

所有这些输出的结果都是空的。

编辑我还用以下内容覆盖了 retrolambda 标记。

retrolambda {

    jdk "/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home"
    oldJdk "/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home"
    javaVersion JavaVersion.VERSION_1_7

} 

然后,我返回以“以非零退出值 2 结束”的方式获取原始异常,但现在在项目设置中设置了 JDK 版本。

错误:任务':mobile:dexDebug'的执行失败。

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command'/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java'' 完成非零退出值 2

4

2 回答 2

3

在我的项目中它工作正常,这是我的build.gradle代码:

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'com.neenbedankt.android-apt'

buildscript {
    repositories {
        mavenLocal()
        jcenter()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
        classpath "me.tatarka:gradle-retrolambda:3.2.0"
    }

}

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "xyz.com"
        minSdkVersion 22
        targetSdkVersion 22

        multiDexEnabled true


        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        dexOptions {
            jumboMode = true
        }

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

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.2.1'
    compile 'com.android.support:appcompat-v7:21.0.3'
}

仅供参考:我C:\Program Files\Java\jdk1.7.0_79在 File >> Project Structure >> SDK Location中选择了JDK Location

于 2015-08-10T12:01:19.760 回答
0

这就是我配置我的 OSx 环境的方式,

  1. 安装最新的 java 8

  2. 编辑您的 .bash_profile (位于您的主目录中)并添加以下行:

    导出 JAVA_HOME=/usr/libexec/java_home 导出 JAVA7_HOME=/usr/libexec/java_home -v 1.7

*现在“java -version”命令必须显示java 1.8,但retrolambda也可以访问java 7主目录。

  1. 将这些行添加到您的项目 build.gradle 文件中:

    依赖项 { ... 类路径'me.tatarka:gradle-retrolambda:3.2.5' 类路径'com.neenbedankt.gradle.plugins:android-apt:1.8'

  2. 将 retrolambda 插件应用于您的 android 应用程序模块 build.gradle:

    应用插件:'me.tatarka.retrolambda'

*无需向此模块添加 retrolambda 编译依赖项。

于 2016-05-26T06:09:55.580 回答