Coder Social home page Coder Social logo

gradle-retrolambda's Introduction

Gradle Retrolambda Plugin

Maven Central

This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or 7. It relies on the wonderful retrolambda by Esko Luontola.

Note: The minimum android gradle plugin is 1.5.0 and the minimum gradle plugin is 2.5.

Usage

  1. Download jdk8 and set it as your default.

  2. Add the following to your build.gradle

    buildscript {
       repositories {
          mavenCentral()
       }
    
       dependencies {
          classpath 'me.tatarka:gradle-retrolambda:3.7.1'
       }
    }
    
    // Required because retrolambda is on maven central
    repositories {
       mavenCentral()
    }
    
    apply plugin: 'com.android.application' //or apply plugin: 'java'
    apply plugin: 'me.tatarka.retrolambda'

    alternatively, you can use the new plugin syntax for gradle 2.1+

    plugins {
       id "me.tatarka.retrolambda" version "3.7.1"
    }
  3. There is no step three!

The plugin will compile the source code with java8 and then replace the class files with the output of retrolambda.

Configuration

You can add a block like the following to configure the plugin:

retrolambda {
  javaVersion JavaVersion.VERSION_1_6
  jvmArgs '-arg1', '-arg2'
  defaultMethods false
  incremental true
}
  • javaVersion Set the java version to compile to. The default is 6. Only 5, 6 or 7 are accepted.
  • include 'Debug', 'Release' Sets which sets/variants to run through retrolambda. The default is all of them.
  • exclude 'Test' Sets which sets/variants to not run through retrolambda. Only one of either include or exclude should be defined.
  • jvmArgs Add additional jvm args when running retrolambda.
  • defaultMethods Turn on default and static methods in interfaces support. Note: due to a limitation in retrolamba, this will set incremental to false. The default is false.
  • incremental Setting this to false forces all of your class files to be run through retrolambda instead of only the ones that have changed. The default is true.

Using a Different Version of the retrolambda.jar

The default version of retrolambda used is 'net.orfjackal.retrolambda:retrolambda:2.5.6'. If you want to use a different one, you can configure it in your dependencies.

dependencies {
  // Latest one on maven central
  retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:+'
  // Or a local version
  // retrolambdaConfig files('libs/retrolambda.jar')
}

Deprecated Features

If you are running with java 6 or 7 you should really consider updating. However, you may use the below configuration instead.

Set the environment variable JAVA8_HOME to point to the java 8 jdk. Alternatively, you can set the jdk property.

retrolambda {
  jdk System.getenv("JAVA8_HOME")
}

You can force unit tests to be run with an older version of java by setting JAVA5_HOME/JAVA6_HOME/JAVA7_HOME or with the oldJdk property.

retrolambda {
  oldJdk System.getenv("JAVA6_HOME")
}

Android Studio Setup

Add these lines to your build.gradle to inform the IDE of the language level.

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

Proguard

This plugin is fully compatible with proguard (since v2.4.0). In your proguard file, add

-dontwarn java.lang.invoke.*
-dontwarn **$$Lambda$*

Known Issues

Lint fails on java files that have lambdas.

First try updating to the latest version of the android gradle plugin. Newer versions of lint are compatible with java 8 sources. If you can't for some reason, you can still use the experimental fork to fix the issue.

Using Google Play Services causes retrolambda to fail

Version 5.0.77 contains bytecode that is incompatible with retrolambda. This should be fixed in newer versions of play services, if you can update, that should be the preferred solution. To work around this issue, you can either use an earlier version like 4.4.52 or add -noverify to the jvm args. See orfjackal/retrolambda#25 for more information.

retrolambda {
  jvmArgs '-noverify'
}

Updates

All updates have moved to the CHANGELOG.

License

Copyright 2013 Evan Tatarka

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

gradle-retrolambda's People

Contributors

3flex avatar akhikhl avatar archinamon avatar cypressious avatar denis-itskovich avatar drbild avatar dreifachstein avatar eddieringle avatar evant avatar finitem avatar gabrielittner avatar harningt avatar jaredsburrows avatar josh-burton avatar loune avatar madisp avatar mart-bogdan avatar maurizi avatar ncruces avatar stkent avatar tiainen avatar tiembo avatar tkhduracell avatar tomxor avatar vkryachko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-retrolambda's Issues

error: cannot find symbol method metafactory...

I set up an default project in the latest Android Studio. I tried a simple setOnClickListener on the default TextView. Trying to run triggers the compiler producing this error: error: cannot find symbol method metafactory(Lookup,String,MethodType,MethodType,MethodHandle,MethodType)

Here's my build.gradle:

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
}

buildscript {
    repositories {
        mavenCentral()

        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots"
        }
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:1.0-SNAPSHOT'
    }
}

// Required because retrolambda is on maven central
repositories {
    mavenCentral()
}

apply plugin: 'retrolambda'

retrolambda {
    compile "net.orfjackal.retrolambda:retrolambda:1.1.2"
    jdk "A:\\jdk1.8.0"
    javaVersion JavaVersion.VERSION_1_6
}

Doing a rebuild project produces this error: Execution failed for task ':app:compileDebugJava'.

Compilation failed; see the compiler error output for details.

However I'm unable to view the compiler output.

I am completely new to Gradle, Maven, and Android Studio.

Compatibility with RXJava / Guava

Hi,

I think this project may be absolutely amazing if it would be possible to use wiht existing functional library like Guava or RX.

However, I think it s not possible because to make it possible Function class (Guava) or Func1 class (RX) should be annoted as Function to be recognized by Java 8 as functions.

I think if it s not done in the library, it s not possible to inject functions written as lambda.

In particular I thought to build a super class implemented Guava or Rx interface and so use the lambda write. But I think it would not work as the method accepting Function objects in both libraries wait for a function not anoted and so Java 8 won't understand my lambda.

Is there something I am missing? Is there a way to use Guava or Rx with Retrolambda?

Thank you for any tip you can provide.

Regards

Eclipse preview release and Android

I just found this project and can't wait to use it.

I tried to set up a new Android project in Eclipse to use this by following the readme, along with using the preview of Eclipse for Java 8. I'm having trouble piecing this and the Retrolambda's setup instructions together. Is there more documentation, a guide, or a blog post I can follow to get all this working together?

Doesn't work with Android Build tools 0.10.+

This is probable the relevant part of the stacktrace:

Caused by: groovy.lang.MissingPropertyException: Could not find property 'plugin' on com.android.build.gradle.AppExtension_Decorated@6fcf78a0.
    at org.gradle.api.internal.AbstractDynamicObject.propertyMissingException(AbstractDynamicObject.java:43)
    at org.gradle.api.internal.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:35)
    at org.gradle.api.internal.CompositeDynamicObject.getProperty(CompositeDynamicObject.java:94)
    at com.android.build.gradle.AppExtension_Decorated.getProperty(Unknown Source)
    at me.tatarka.RetrolambdaPluginAndroid$_apply_closure1.doCall(RetrolambdaPluginAndroid.groovy:39)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
    at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy14.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
    ... 49 more

Respect incremental builds

Right now the plugin simply replaces the compiled classes with the ones run through retrolambda. This means that gradle will rebuild every time even if none of the source files have changed. Should instead have the compiled classes and the output of retrolambda be in different directories.

problem running instrumentation tests

I'm facing an issue similar to #18 . I get an exception when running normal instrumentation tests, but for a class that's placed in an independent directory (i.e. a subproject).

Here's the exception:

Executing tasks: [:app:assembleDebug, :app:assembleDebugTest]

---- /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
---- /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
---- 1.6
// ....
:app:mergeDebugResources
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava
:app:compileRetrolambdaDebug
objc[90452]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
:app:preDexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
  at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
  at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
  at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
  at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
  at com.android.dx.command.dexer.Main.processClass(Main.java:665)
  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
  at com.android.dx.command.dexer.Main.access$600(Main.java:78)
  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
  at com.android.dx.command.dexer.Main.processOne(Main.java:596)
  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
  at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
  at com.android.dx.command.dexer.Main.run(Main.java:230)
  at com.android.dx.command.dexer.Main.main(Main.java:199)
  at com.android.dx.command.Main.main(Main.java:103)
...while parsing com/mycompany/app/pojo/TrackingData.class

1 error; aborting

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/19.1.0/dx --dex --output ~/code/myapp/app/build/intermediates/pre-dexed/debug/pojos-688c6bfda22a0b4cc1fcd404a1c3832cb61f70ee.jar ~/code/myapp/app/pojos/build/libs/pojos.jar
  Error Code:
    1
  Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
      at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
      at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
      at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
      at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
      at com.android.dx.command.dexer.Main.processClass(Main.java:665)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing com/mycompany/app/pojo/TrackingData.class

    1 error; aborting


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 15.057 secs

OS: OSX Maverics

echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
echo $JAVA8_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
echo $JAVA6_HOME
/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home

build.gradle (IDEA project level)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'me.tatarka:gradle-retrolambda:2.1.0'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.9'
}

build.gradle (app level)

evaluationDependsOn(':subProjects:pojos')

// ..

apply plugin: 'com.android.application'
apply plugin: 'crashlytics'
apply plugin: 'retrolambda'


repositories {
    mavenCentral()
    maven { url 'http://download.crashlytics.com/maven' }
}

dependencies {
    compile 'com.android.support:support-v13:20.0.+'
    compile 'com.google.guava:guava:17.+'
    // ..
    compile project(':subProjects:pojos')
    // ..
}

android {

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    // see https://github.com/JakeWharton/double-espresso/issues/13
    useOldManifestMerger true

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        // ..
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA6_HOME")
    javaVersion JavaVersion.VERSION_1_6
    println "---- ${System.getenv("JAVA8_HOME")}"
    println "---- ${System.getenv("JAVA_HOME")}"
    println "---- ${System.getenv("JAVA6_HOME")}"
    println "---- ${javaVersion}"
}

class file for java.lang.invoke.MethodType not found

I tried to setup new sample project and it can't compile.

An exception has occurred in the compiler (1.8.0_05). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not found
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJava'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 
.
.
.
Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:47)
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:38)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:96)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:49)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:35)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:29)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:20)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.java:33)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.java:24)
    at org.gradle.api.tasks.compile.Compile.compile(Compile.java:67)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 72 more

Setup is similar as in the doc except:

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_7
}

Environment variables are set to:
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
respectively.

Build slow

I am just interested in hearing how long time your apps take to build?
Our app takes about 45 seconds to build in average. Before with ANT it took a few seconds.
We changed to gradle and added retrolambda at the same time so I am not sure what the cause of it is.
Do you think it is related to retrolambda?

buildscript {
    repositories {
        mavenCentral()
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
        classpath 'com.google.guava:guava:14.0.1'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
        classpath 'me.tatarka:gradle-retrolambda:1.1.1'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.2'
    }
}

repositories {
    mavenCentral()
    maven { url 'http://download.crashlytics.com/maven' }
}

apply plugin: 'android'
apply plugin: 'crashlytics'
apply plugin: 'retrolambda'
apply plugin: 'android-apt'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.google.guava:guava:14.0.1'
    compile 'com.crashlytics.android:crashlytics:1.+'
    apt "org.androidannotations:androidannotations:3.0.1"
    compile "org.androidannotations:androidannotations-api:3.0.1"
}

apt {
    arguments {
        resourcePackageName "com.example"
        androidManifestFile variant.processResources.manifestFile
    }
}

android {
    packagingOptions { //Fix: http://stackoverflow.com/a/20675331/860488
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    compileSdkVersion 10
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 10
        buildConfigField "boolean", "useProductionServices", "true"
    }

    buildTypes {
        testflight.initWith(buildTypes.debug)
        debug {
            packageNameSuffix ".debug"
            buildConfigField "boolean", "useProductionServices", "false"
        }

        testflight {
            packageNameSuffix ".testflight"
            buildConfigField "boolean", "useProductionServices", "true"
        }

        release {
            buildConfigField "boolean", "useProductionServices", "true"
        }
    }
}

retrolambda {
    compile "net.orfjackal.retrolambda:retrolambda:1.1.2"
    jdk System.getenv("JAVA8_HOME")
}

task dexRelease fails with "IllegalArgumentException: already added" when using Proguard

Version 1.3.3 works fine.

Version 2.2.3 combined with Proguard causes the dexRelease task to throw

Exception in thread "pool-XXX-thread-XXX" java.lang.IllegalArgumentException: already added: L<class_name>;

for each class in the project (libraries and my code).

Perhaps this is caused by the same issue underlying Issue #28 (which also affects my project)?

Please let me know what additional info you need to help diagnose and fix this. Thanks for the great plugin!

Android with lambda on Eclipse

Just raising issue in hope to find someone interested in "Android with lambda on Eclipse".

Java 8 support in Eclipse is http://marketplace.eclipse.org/content/eclipse-java-8-support-kepler-sr2-jdt-pde

For Gradle there are:

.project example:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>AndroidProjectExample</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ApkBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

I wonder would it be possible to let JDT for editing and leverage gradle for building .apk...

http://zserge.com/blog/android-lambda.html

apt generated directory not found.

gradle-retrolambda version 2.4.1 / android-apt 1.4 / android gradle (0.14.1) / tools 21.1.0

Suddenly we are seeing strange issues in our build process.. there are no diffs to any gradle files.

However, we now see this:

:models:patchAndroidJar
:models:_compileReleaseJava
javac: directory not found: 
/projects/android/models/build/generated/source/apt/release

and this is the order of applied plugins:

apply plugin: 'com.android.library'
apply plugin: 'retrolambda'
apply plugin: 'android-apt'

Everything was working fine a few hours ago.. and checking out source to yesterday doesn't seem to help. Is anyone else noticing bizarre issues today? Or am I completely nuts? I'm at a bit of a loss at the moment.

Spelling errors in README

Hi Evan,
Thank you for a nice plugin!
Please fix spelling errors in README: "lamba" -> "lambda", "compileing" -> "compiling".

Plugin does not respect changed sourceSets

I have a project which changes it's sourceSets depending on the set of tests we want to run. Some builds run:

android.sourceSets.androidTest.setRoot('src/unitTest')

While others run:

android.sourceSets.androidTest.setRoot('src/integrationTest')

With gradle-retrolambda, if you've already compiled certain tests, then switch the source set directory, the old tests are still run. I made a sample app to demonstrate this. Run the tests once, then comment this line out and run the tests again. This time both tests will run, even though only one set is specified in the build.gradle. If you clean, the right test is then run, but it doesn't seem like that should be necessary. It seems that the old .class files from previous compilations are stored in <module>/build/debugTest which causes them to be executed. If you remove all of the retrolambda configurations, Gradle runs the correct tests each time.

Let me know if I can help - I tried looking around the source code but wasn't sure exactly where to begin - or if anything needs more explanation.

Unsupported major.minor version 52.0 in 2.2.3

as mentioned in #37

With
JAVA8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
and
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
and
JAVA7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

Even with 2.2.3 I get

me/tatarka/RetrolambdaPlugin : Unsupported major.minor version 52.0

unless I make JAVA_HOME=$JAVA8_HOME

OR set
org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

in gradle.properties

Compatibility JavaVersion.VERSION_1_8 breaks tests

Adding the following to build.gradle (as suggested in the readme and being the only way to force the syntax on Android Studio):

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

...Results in the following exception when trying to run unit tests in Android Studio 0.4.6:

Information:Gradle tasks [:TestApp:assembleDebug, :TestApp:assembleDebugTest]
Information:objc[31058]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Information:UNEXPECTED TOP-LEVEL EXCEPTION:
Information:...while parsing me/eugeniomarletti/testingtests/test/BuildConfig.class
Information:1 error; aborting
Information:1 error
Information:0 warnings
Information:Information:See complete output in console
Error:Execution failed for task ':TestApp:dexDebugTest'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/android-4.4.2/dx --dex --output /Users/eugeniomarletti/Dropbox/Projects/TestingTests/TestApp/build/dex/test/debug /Users/eugeniomarletti/Dropbox/Projects/TestingTests/TestApp/build/classes/test/debug /Users/eugeniomarletti/Dropbox/Projects/TestingTests/TestApp/build/dependency-cache/test/debug
  Error Code:
    1
  Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
      at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
      at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
      at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
      at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
      at com.android.dx.command.dexer.Main.processClass(Main.java:665)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:170)
      at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
      at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
      at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
      at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
      at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing me/eugeniomarletti/testingtests/test/BuildConfig.class
    1 error; aborting

Setup problem?

I keep getting this error in Android Studio 0.4.5

Execution failed for task ':app:patchAndroidJar'.

Retrolambda: null/jre/lib/rt.jar does not exist, make sure that JAVE_HOME or retrolambda.jdk points to a valid version of java8
You can download java8 from https://jdk8.java.net/download.html

I have tried to follow your setup guidelines.
Java 8 is installed and both JAVA8_HOME and JAVA_HOME points to it.

Any ideas?

Error during task 'extractDebugAnnotations'

I'm receiving the following error during our gradle 'assembleDebug' task, when it gets to 'extractDebugAnnotations'

OpenTreeMap/src/org/azavea/otm/data/PendingEditDescription.java:45: '<>' operator is not allowed for source level below 1.7

The file is sometimes different, but it always has to do with a Java-6 incompatability, even though we have the source and target level set to 1.8.

Our gradle configurations are as follows:
Top level:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'me.tatarka:gradle-retrolambda:2.1.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

Main project:

apply plugin: 'com.android.application'

dependencies {
    compile project(':OpenTreeMap')
}

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

Library project (Where the majority of our code/resources live):

apply plugin: 'com.android.library'
apply plugin: 'retrolambda'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.google.android.gms:play-services:5.0.+'
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'org.jdeferred:jdeferred-android-aar:1.2.1'
    compile 'com.google.guava:guava:17.0'
}

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

Is there something I'm doing wrong?

"Broken class file" error during assembleRelease task

There seems to be something slightly off when I call ./gradlew assembleRelease, but not with assembleDebug. Release mode generates lots of error messages, though the .apk still functions as expected. In version 1.3.3 of the plugin, the following message is generaed

Exception in thread "pool-1-thread-5" com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
    at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
    at com.android.dx.command.dexer.Main.processClass(Main.java:665)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
    at com.android.dx.command.dexer.Main.access$600(Main.java:78)
    at com.android.dx.command.dexer.Main$ParallelProcessor.run(Main.java:1550)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
...while parsing com/myapp/android/R$id.class

For every one of my classes. In versions 2.0.0. and 2.1.0 the following error is shorter:

Error processing /path/to/my/app/module/build/retrolambda/release/com/myapp/android/Util.class: broken class file?

This is all output between the :app:lintVitalRelease and :app:compileReleaseNdk tasks. Any idea what this may be?

Getting errors like "

When I try to use the new APIs designed for lambdas, such as Collection.stream(), neither gradle (nor Android Studio running on top of gradle) can find them. What might be the issue?

Build fails with "directory not found: ...\build\generated\source\apt\production\release"

Using version 2.4.0 of the plugin my build fails with the error message directory not found: ...\build\generated\sou rce\apt\production\release. I am using the gradle plugin com.neenbedankt.gradle.plugins:android-apt:1.4 for annotation processing which I suspect makes trouble with the latest version of the retrolambda plugin.

Here's a a minimal project that produces the error: https://github.com/cypressious/RetrolambdaFailure2

Incompatible with the gradle 'android-library' plugin ?

:app:compileReleaseJava
An exception has occurred in the compiler (1.8.0). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not found:app:compileReleaseJava FAILED

FAILURE: Build failed with an exception.

This is with a tiny test project with just the one empty class containing a single method:

    void aVoid() {
        new Handler().post(this::aVoid);
    }

The exact same project works fine if I switch from the android-library plugin to the android plugin. I would love to dig deeper into this, but I have no idea where to start.

Please let me know if there's anything else I can provide.

Proguard fails with lambdas

For every lambda usage, proguard reports:

Warning: fj.F1Functions: can't find referenced class java.lang.invoke.MethodHandles$Lookup
Warning: fj.F1Functions: can't find referenced class java.lang.invoke.MethodHandles

(fj.F1Functions as an example)
As a note, I'm on using it on android.

Failing with Glass

I'm ran into these problems with retrolambda 2.4.0 and 2.3.0.

Google Glass requires: compileSdkVersion "Google Inc.:Glass Development Kit Preview:19"
I first had to create a simlink from android-19 to "Google Inc.:Glass Development Kit Preview:19". Now retrolambda found android.jar.

The next problem was app:_compileDebugJava.

17:43:35.270 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -d /Users/ericredmond/AndroidStudioProjects/ContextSurgery/app/build/retrolambda/debug -g -bootclasspath /Users/ericredmond/AndroidStudioProjects/ContextSurgery/app/build/retrolambda/Google Inc.:Glass Development Kit Preview:19/android.jar ...
17:43:35.272 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler] Compiling with JDK Java compiler API.
17:43:35.802 [ERROR] [system.err] Fatal Error: Unable to find package java.lang in classpath or bootclasspath
17:43:35.804 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':app:_compileDebugJava'
17:43:35.804 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :app:_compileDebugJava FAILED

Fine. I set exclude 'Debug'. That got a bit further, but then started getting the bad class file magic problem.

:app:dexDebug

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
...

That was the furthest I could get.

Proguard fails to read android.jar after updating it with patchAndroidJar

While processing proguardRelease, proguard fails with error:
java.io.IOException: Can't read [/home/yarik/android/android-sdk/platforms/android-19/android.jar] (Can't process class [java/lang/invoke/LambdaConversionException.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))

Android Studio 0.9.1, OSX, JDK8 not found

This is my current configuration:

Module's build.gradle:

apply plugin: 'retrolambda'

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA6_HOME")
    javaVersion JavaVersion.VERSION_1_6
}

System env

dhcp-159-104-130-193:~ me$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
dhcp-159-104-130-193:~ me$ echo $JAVA8_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

AS GUI config:

JDK Location: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

And it's still not finding it due to:

Error:Execution failed for task ':mobile:patchAndroidJar'.
> Retrolambda: null/jre/lib/rt.jar does not exist, make sure that the environment variable JAVA_HOME or JAVA8_HOME, or the gradle property retrolambda.jdk points to a valid version of java8.

Unsupported major.minor version 52.0

Whenever adding the plugin to Android Studio I get:
Error:(2, 0) Cause: me/tatarka/RetrolambdaPlugin : Unsupported major.minor version 52.0

Andriod Studio 0.8.6
Gradle Build Tools 20.0.0

Use of 'compile' property is unclear

According to the documentation, the 'compile' property can be used to configure the path to the 'retrolambda.jar' that will be used, but it's unclear what this actually means. I'd like to test a fix in retrolambda 1.1.4 (which fixes issue luontola/retrolambda#13), but I ran into these issues:

  1. Maven central doesn't have either retrolambda 1.1.3 or retrolambda 1.1.4.
  2. Setting the property to compile "net.orfjackal.retrolambda:retrolambda:1.1.1" (which is available in maven), didn't actually cause that version to be used.
  3. Compiling retrolambda myself and setting the property to the absolute path of the 'retrolambda.jar' I'd built also had no effect, as retrolambda 1.1.2 was still used.

I assume this issue can probably be fixed by having some more explicit examples in the documentation, though I'm not sure who's responsible for deploying the retrolambda artifact to Maven Central?

Directory based error when compilation task does not contain any classes.

When compiling with no test classes it will fail on the compileRetrolambdaTest due to build\retrolambda\test being nonexistent on the filesystem, a workaround is to create those directories, but it is not desirable due to get a build in this case, it is solved by creating the directories.

backport fix for #31 to 1.3.x

Could the fix for Issue #31 (supporting the -noverify jvm argument) be backported to 1.3 and released as 1.3.4?

I tried a simple cherry-pick of 9f5d8ba, but the internals have changed too much from 1.3 to 2.x.

Thanks.

Fatal Error: Unable to find package java.lang in classpath or bootclasspath

Hi, I am trying to integrate gradle-retrolambda in my Android project, but I am getting the following error when I run my gradle build

:app:compileDebugJava
Fatal Error: Unable to find package java.lang in classpath or bootclasspath

Stacktrace:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJava'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
....
Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:47)
at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJav

I thought it was strange, that it uses the jdk6.Jdk6JavaCompiler although I configured for Java7 compatibility, see below.

Gradle version info:
------------------------------------------------------------
Gradle 1.12
------------------------------------------------------------

Build time:   2014-04-29 09:24:31 UTC 
Build number: none 
Revision:     a831fa866d46cbee94e61a09af15f9dd95987421

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
Ivy:          2.2.0
JVM:          1.8.0_11 (Oracle Corporation 25.11-b03)
OS:           Linux 3.13.0-32-generic amd64

Java environment paths:
JAVA_HOME=/usr/lib/jvm/java-8-oracle
JAVA8_HOME=/usr/lib/jvm/java-8-oracle
JAVA7_HOME=/usr/lib/jvm/java-7-oracle

Gradle build file:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'me.tatarka:gradle-retrolambda:2.2.1'
   }

}

repositories {
    mavenCentral()
    flatDir {
        dirs 'prebuilt-libs'
    } 
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion "Google Inc.:Glass Development Kit Preview:19"
    buildToolsVersion "20.0.0"

   defaultConfig {
        minSdkVersion 19
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {
         exclude 'LICENSE.txt'
         exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
} 

 dependencies {
     // gcm (old client library)
     compile fileTree(dir: 'libs', include: ['*.jar'])

     // auto factory (https://github.com/google/auto/tree/master/factory)
     compile 'com.google.auto.factory:auto-factory:0.1-beta1'   

     // auto value (https://github.com/google/auto/tree/master/value)
     compile 'com.google.auto.value:auto-value:1.0-rc1'

     // dagger
     compile 'com.squareup.dagger:dagger:1.2.0'
     provided 'com.squareup.dagger:dagger-compiler:1.2.0'   

     // butterknife for view injection
     compile 'com.jakewharton:butterknife:5.1.1'

     // javax annotations (needed for auto generated files)
     compile 'javax.annotation:jsr250-api:1.0'

     // google guava
     compile 'com.google.guava:guava:17.0'

     // support library
     compile 'com.android.support:support-v4:20+'

    // google zxing barcode reader
    compile 'com.google.zxing:core:2.3.0'

     // progress bar - https://github.com/w9jds/GDK-ProgressBar
    compile 'com.w9jds.gdk.progresswidget:library:1.0@aar'

    // espresso - https://github.com/JakeWharton/double-espresso
    androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r3') {
        exclude group: 'com.squareup.dagger'
        exclude group: 'com.android.support'
    } 
}

apply plugin: 'retrolambda'

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_7 
}

Just to verify my java8 installation, I created a gradle project in intellij without retrolambda, and that works fine.

Do you have any idea, what might go wrong here and how to fix it?

Code doesn't work

I work on a large scale project, and this plugin just doesn't work. For example, it seems to have issues inferring what the type of parameters you're passing into a method is.

"Broken class file" error during assembleRelease task

There seems to be something slightly off when I call ./gradlew assembleRelease, but not with assembleDebug. Release mode generates lots of error messages, though the .apk still functions as expected. In version 1.3.3 of the plugin, the following message is generaed

Exception in thread "pool-1-thread-5" com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
    at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
    at com.android.dx.command.dexer.Main.processClass(Main.java:665)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
    at com.android.dx.command.dexer.Main.access$600(Main.java:78)
    at com.android.dx.command.dexer.Main$ParallelProcessor.run(Main.java:1550)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
...while parsing com/myapp/android/R$id.class

For every one of my classes. In versions 2.0.0. and 2.1.0 the following error is shorter:

Error processing /path/to/my/app/module/build/retrolambda/release/com/myapp/android/Util.class: broken class file?

This is all output between the :app:lintVitalRelease and :app:compileReleaseNdk tasks. Any idea what this may be?

Execution failed for task ':myModule:_compileProductionDebugJava' when using incremental conpilation

I'm using gradle-retrolambda 2.4.1 together with android-apt and have

allprojects {
    tasks.withType(JavaCompile) {
        options.incremental = true
    }
}

set. This is a new feature of Gradle 2.1 but it seems to cause compilation errors with gradle-retrolambda. Notice that the build fails at the task with the underscore at the beginning.

Here's the stacktrace:

* What went wrong:
Execution failed for task ':myModule:_compileProductionDebugJava'.
> Unable to find source java class: 'Z:\Repos\MyProject\myModule\src\main\java\package\MyClass.java' because it does not belong to any of the source dirs: '[]'

* Try:        
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':myModule:_compileProductionDebugJava'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69
)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.
java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.ja
va:42)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)

        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)

        at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java
:79)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java
:63)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:8
0)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:258)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.HandleCancel.execute(HandleCancel.java:36)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:30)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
        at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java
:52)
        at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingCon
nectionHandler.java:154)
        at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultI
ncomingConnectionHandler.java:128)
        at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHan
dler.java:116)
        at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: java.lang.IllegalArgumentException: Unable to find source java class: 'Z:\Repos\MyProject\myModulesrc\main\java\package\MyClass.java' because it does not belong to any of the source dirs: '[]'
        at org.gradle.api.internal.tasks.compile.incremental.SourceToNameConverter.getClassName(SourceToNameConverter.java:44)
        at org.gradle.api.internal.tasks.compile.incremental.recomp.JavaChangeProcessor.processChange(JavaChangeProcessor.java:
35)
        at org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpecProvider$InputChangeAction.execute(Recompi
lationSpecProvider.java:70)
        at org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpecProvider$InputChangeAction.execute(Recompi
lationSpecProvider.java:54)
        at org.gradle.api.internal.changedetection.changes.ChangesOnlyIncrementalTaskInputs.doOutOfDate(ChangesOnlyIncrementalT
askInputs.java:48)
        at org.gradle.api.internal.changedetection.changes.StatefulIncrementalTaskInputs.outOfDate(StatefulIncrementalTaskInput
s.java:40)
        at org.gradle.api.internal.changedetection.changes.ChangesOnlyIncrementalTaskInputs.outOfDate(ChangesOnlyIncrementalTas
kInputs.java:28)
        at org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpecProvider.provideRecompilationSpec(Recompil
ationSpecProvider.java:45)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:55)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:33)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilationFinalizer.execute(IncrementalCompilationFina
lizer.java:39)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilationFinalizer.execute(IncrementalCompilationFina
lizer.java:25)
        at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:127)
        at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:101)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(Annotati
onProcessingTaskFactory.java:235)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationPro
cessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(Annotation
ProcessingTaskFactory.java:222)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationPro
cessingTaskFactory.java:200)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)

        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61
)
        ... 69 more

I'm not 100% sure if this is a gradle-retrolambda issue or an android-apt issue.

Gradle plugin 0.14.0 problems

Caused by: java.lang.NullPointerException: Cannot invoke method remove() on null object
at me.tatarka.RetrolambdaPluginAndroid$_apply_closure1_closure2.doCall(RetrolambdaPluginAndroid.groovy:101)
at me.tatarka.RetrolambdaPluginAndroid$_apply_closure1.doCall(RetrolambdaPluginAndroid.groovy:63)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:83)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy13.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
... 52 more

JAVA_HOME env

Possibly add this useful snippet in the docs (for OS X):

# ~/.bash_profile 
export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA8_HOME=`/usr/libexec/java_home -v 1.8`

Android sources are not found in Android Studio

When using Retrolambda on new project, Android Studio for some reason can't find Android sources which results in a lot of error in editor. Although, project can be built and run without any errors.

What is even more strange, after rolling back all retrolambda changes (including switching to Java 6 or 7) project still can't locate Android sources. Rebuild/cleaning/reimporting does not help.

Gradle version: 1.12

Gradle config:

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

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:2.4.0'
    }
}

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "hack.lambda"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

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

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

Failed to run robolectric tests for android project with Retrolambda

Got error java.lang.UnsupportedClassVersionError: com/example/app/R : Unsupported major.minor version 52.0

build config for test project:

apply plugin: 'java'
apply plugin: 'retrolambda'

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA_HOME")
    javaVersion JavaVersion.VERSION_1_6
}

dependencies {
    def androidModule = project(':app')
    compile androidModule

    testCompile androidModule.android.applicationVariants.toList().first().javaCompile.classpath
    testCompile androidModule.android.applicationVariants.toList().first().javaCompile.outputs.files
    testCompile files(androidModule.plugins.findPlugin("com.android.application").getBootClasspath())

    testCompile 'junit:junit:4.+'
    testCompile 'org.robolectric:robolectric:2.2'
}

tasks.withType(Test) {
    scanForTestClasses = false
    include "**/*Should.class"
    include "**/*Test.class"
    include "**/*Tests.class"
}

all class files are missing from apk using 2.3.0 with "incremental false"

Version 2.3.0 with incremental false seems broken. The build process runs successfully, but the compiled class files are missing from the APK (i.e., classes.dex).

I'm using gradlew clean; gradlew assembleDebug to build.

With incremental false, the *.class files appear in:

  • build/retrolambda/debug/...

With incremental true, the *.class files appear in:

  • build/intermediates/debug/...
  • build/retrolambda/debug/...
  • classes.dex in build/outputs/apk/*.apk

Losing line number and source information with Proguard optimizations

When running application that was optimized with Proguard generated classes looses line number and source information.

Without Proguard optimizations:

  Caused by: java.lang.RuntimeException: Exception!
            at com.demo.activities.TestActivity.lambda$sample$46(TestActivity.java:334)
            at com.demo.activities.TestActivity.access$lambda$4(TestActivity.java)
            at com.demo.activities.TestActivity$$Lambda$5.run(Unknown Source)
            at com.demo.activities.TestActivity.sample(TestActivity.java:337)
            at com.demo.activities.TestActivity.onCreate(TestActivity.java:329)
            at android.app.Activity.performCreate(Activity.java:5312)

with:

Caused by: java.lang.RuntimeException: Exception!
            at com.demo.activities.TestActivity.access$lambda$4(TestActivity.java)
            at com.demo.activities.TestActivity$$Lambda$5.run(Unknown Source)
            at com.demo.activities.TestActivity.onCreate(TestActivity.java:329)
            at android.app.Activity.performCreate(Activity.java:5312)

although not sure where to create issue. Here or there https://github.com/orfjackal/retrolambda

Execution failed for task ':blsAndroid:compileRetrolambdaDebug'.

My builds fail with the following error:

Execution failed for task ':myModule:compileRetrolambdaDebug'.
> Process 'command 'D:\Program Files\Java\jdk1.8.0_11\bin\java.exe'' finished with non-zero exit value 1

Here's my build.gradle:

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

android {
    signingConfigs {
        release {
            //sign config here
        }
    }

    compileSdkVersion 19
    buildToolsVersion '20.0.0'

    defaultConfig {
        applicationId 'package.name'
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 33
        versionName "2.3 alpha1"

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        testApplicationId 'my.package.test'
        testInstrumentationRunner 'android.test.InstrumentationTestRunner'
    }

    lintOptions {
        abortOnError false
    }

    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
    }
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
            signingConfig signingConfigs.release
        }
    }

    productFlavors {
    }
}

dependencies {
    compile project(':dateTimePicker')
    compile 'com.google.android.gms:play-services:+'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile 'com.android.support:support-v4:19.1.0'
    compile 'ch.acra:acra:4.5.0'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'commons-primitives:commons-primitives:1.0'
    compile 'com.jakewharton:butterknife:5.1.1'
    compile 'com.squareup.dagger:dagger:1.2.0'
    compile 'javax.annotation:jsr250-api:1.0'
    compile 'com.google.auto.factory:auto-factory:0.1-beta1'

    apt 'com.squareup.dagger:dagger-compiler:1.2.0'
    apt 'com.google.auto.factory:auto-factory:0.1-beta1'

    androidTestCompile 'org.mockito:mockito-core:1.9.5'
    androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
}

It used to work until some point, but I'm not sure what changed. When I go back to an older revision of my code, the same error appears. I tried cleaning the project with no luck, too.

Android Studio setup

"Luckily Android Studio already has built-in lambda support! Enable it for your android project by going to File -> Project Structure -> Project and selecting 8.0 - Lambdas, type annotations etc. under Project language level."

I can't see Project Language Level in Android Studio 0.8.9

Android Studio (w/ Lollipop?) - Error:Execution failed for task ':app:compileRetrolambdaStagingDebug'. ... /bin/java'' finished with non-zero exit value 1

In Android Studio, since updating the SDK 21, my build seems to fail after making any changes in Android Studio. I get the following error message:

Error:Execution failed for task ':app:compileRetrolambdaStagingDebug'.

Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

Stacktrace:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileRetrolambdaStagingDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:45)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:32)
    at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:134)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:258)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleCancel.execute(HandleCancel.java:36)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:30)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:52)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:154)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365)
    at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:31)
    at org.gradle.api.internal.file.DefaultFileOperations.javaexec(DefaultFileOperations.java:159)
    at org.gradle.api.internal.project.AbstractProject.javaexec(AbstractProject.java:793)
    at org.gradle.api.internal.ProcessOperations$javaexec.call(Unknown Source)
    at me.tatarka.RetrolambdaTask.execute(RetrolambdaTask.groovy:62)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 70 more

BUILD FAILED

Total time: 2.586 secs
Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

If I run assembleStagingDebug from the command line, the task executes successfully, and I'm able to build and run in Android Studio immediately after.

Potentially related?: #36
Looking in my $ANDROID_HOME/platforms directory, I see a "android-21" and "android-L" directory.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.