Требование Retrolambda для Java 8 Причина:mobile:dexDebug'Исключение

У меня большие проблемы с попыткой заставить работать retrolambda в моем проекте. Существует множество проблем и решений, связанных с сексом, но я не нашел ни одной, которая бы не прибавляла multiDexEnabled пометить в файл оценки.

Я получаю следующую ошибку.

Ошибка: не удалось выполнить задачу ':mobile:dexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: процесс 'команда'/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'.

При запуске Gradle с Java 5, 6 или 7, вы должны установить путь к jdk8, либо с помощью свойства retrolambda.jdk или переменной среды JAVA8_HOME

Так что в моем.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)

Теперь, когда я делаю следующее в Termainal 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: процесс 'команда'/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java'' закончен с ненулевым значением выхода 2

2 ответа

Решение

В моем проекте все работает нормально, это мой 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 в файле >> Структура проекта >> Расположение SDK JDK Location,

Вот как я настроил свою среду OSx,

  1. установить последнюю версию Java 8

  2. отредактируйте ваш.bash_profile (расположенный в вашем домашнем каталоге) и добавьте следующие строки:

    export JAVA_HOME = / usr / libexec / java_home export JAVA7_HOME = / usr / libexec / java_home -v 1.7

* теперь команда "java -version" должна отображать java 1.8, но retrolambda может также получить доступ к домашнему каталогу java 7.

  1. добавьте эти строки в ваш файл build.gradle проекта:

    зависимости { ... classpath 'me.tatarka:gradle-retrolambda:3.2.5' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

  2. примените плагин retrolambda к вашему модулю приложения для Android build.gradle:

    применить плагин: 'me.tatarka.retrolambda'

* нет необходимости добавлять зависимости компиляции retrolambda к этому модулю.

Другие вопросы по тегам