A gradle plugin for getting java lambda support in java 6, 7 and android

Overview

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.
Comments
  • Support the new Transform API

    Support the new Transform API

    Starting with 1.4.0-beta2, the android gradle plugin includes a Transform API to manipulate class files. This should be a better way to do things as it's guarenteed to play well with other tasks unlike the current implementation.

    enhancement 
    opened by evant 46
  • Unsupported major.minor version 52.0 2.5.0

    Unsupported major.minor version 52.0 2.5.0

    keep getting error in Android Studio 1.0.1

    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath 'me.tatarka:gradle-retrolambda:2.5.0'
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    apply plugin: 'com.android.application'
    apply plugin: 'me.tatarka.retrolambda'
    
    retrolambda {
        jdk System.getenv("JAVA8_HOME")
        oldJdk System.getenv("JAVA7_HOME")
        javaVersion JavaVersion.VERSION_1_7
        jvmArgs '-arg1', '-arg2'
    }
    
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        compileSdkVersion 21
        buildToolsVersion "21.1.1"
    
        defaultConfig {
            applicationId "com.aaa.bbb.android"
            minSdkVersion 15
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:21.0.3'
    }
    

    JAVA7_HOME=C:\Program Files\Java\jdk1.7.0_65 JAVA8_HOME=C:\Program Files\Java\jdk1.8.0_25 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_25

    opened by avestnik 36
  • Retrolambda breaks lint

    Retrolambda breaks lint

    Related to #69, but figured I'd open a more general issue for discussion and the hope that someone has come up with a creative solution to this.

    As of right now, the version of Lombok used by the linter doesn't support lambdas, which causes it to fall over during linting (example output below). This is a dealbreaker for many, as lint is an important tool for catching issues and can also double back as a data generator for scripting tools (like removing unused resources).

    An ideal solution would probably be a recompiled version of the linter with an updated Lombok dependency that supports Java 8.

    A possible alternative could be adding a rule to somehow skip LambdaExpression nodes in the AST during processing, though I think this would come at the expense of knowing anything inside the lambda.

    Example output of the exception encountered:

    Failed converting ECJ parse tree to Lombok for file someclass.java
    java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression
        at lombok.ast.ecj.EcjTreeVisitor.visitOther(EcjTreeVisitor.java:368)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:364)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitMessageSend(EcjTreeConverter.java:1042)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:156)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:397)
        at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitConstructorDeclaration(EcjTreeConverter.java:1194)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:252)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.createNormalTypeBody(EcjTreeConverter.java:563)
        at lombok.ast.ecj.EcjTreeConverter$2.visitTypeDeclaration(EcjTreeConverter.java:486)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:48)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitCompilationUnitDeclaration(EcjTreeConverter.java:441)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:264)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at com.android.tools.lint.EcjParser.parseJava(EcjParser.java:407)
        at com.android.tools.lint.client.api.JavaVisitor.visitFile(JavaVisitor.java:236)
        at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.java:1491)
        at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.java:1026)
        at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.java:882)
        at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:433)
        at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:374)
        at com.android.tools.lint.LintCliClient.run(LintCliClient.java:130)
        at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:112)
        at com.android.build.gradle.internal.LintGradleClient$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at com.android.build.gradle.tasks.Lint.runLint(Lint.groovy:198)
        at com.android.build.gradle.tasks.Lint.this$4$runLint(Lint.groovy)
        at com.android.build.gradle.tasks.Lint$this$4$runLint$1.callCurrent(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
        at com.android.build.gradle.tasks.Lint.lintSingleVariant(Lint.groovy:173)
        at com.android.build.gradle.tasks.Lint$lintSingleVariant$0.callCurrent(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
        at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:75)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        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.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:119)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
        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:119)
        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:119)
        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:119)
        at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
        at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
        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:745)
    
    opened by ZacSweers 34
  • Issue compiling from clean build

    Issue compiling from clean build

    I've started running into an issue with retrolambda and the latest AppCompat release.

    Steps to reproduce:

    1. Update AppCompat dependency on a project to 22.1.1
    2. Run ./gradlew clean
    3. Run ./gradlew compile (Yes, separately from the last step - done together it worked sometimes)
    4. See this error if you are using lambdas inside of a class extending FragmentActivity:
    Error! Failed to transform some classes
    java.lang.RuntimeException: java.lang.IllegalAccessException: no such method: com.trello.common.TFragmentActivity.lambda$bindObservable$214(Observable)Observable/invokeSpecial
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:42)
        at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.backportLambda(BackportLambdaInvocations.java:105)
        at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.visitInvokeDynamicInsn(BackportLambdaInvocations.java:94)
        at net.orfjackal.retrolambda.asm.ClassReader.readCode(ClassReader.java:1439)
        at net.orfjackal.retrolambda.asm.ClassReader.readMethod(ClassReader.java:1017)
        at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:693)
        at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:506)
        at net.orfjackal.retrolambda.Transformers.lambda$transform$4(Transformers.java:106)
        at net.orfjackal.retrolambda.Transformers$$Lambda$2/2007328737.accept(Unknown Source)
        at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:120)
        at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:106)
        at net.orfjackal.retrolambda.Transformers.backportClass(Transformers.java:46)
        at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:72)
        at net.orfjackal.retrolambda.Main.main(Main.java:26)
    Caused by: java.lang.IllegalAccessException: no such method: com.trello.common.TFragmentActivity.lambda$bindObservable$214(Observable)Observable/invokeSpecial
        at java.lang.invoke.MemberName.makeAccessException(MemberName.java:872)
        at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:993)
        at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1379)
        at java.lang.invoke.MethodHandles$Lookup.findSpecial(MethodHandles.java:997)
        at net.orfjackal.retrolambda.lambdas.Types.toMethodHandle(Types.java:42)
        at net.orfjackal.retrolambda.lambdas.Types.asmToJdkType(Types.java:19)
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.callBootstrapMethod(LambdaReifier.java:106)
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:37)
        ... 13 more
    Caused by: java.lang.NoClassDefFoundError: android/support/v4/view/LayoutInflaterFactory
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at net.orfjackal.retrolambda.NonDelegatingClassLoader.loadClass(NonDelegatingClassLoader.java:25)
        at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
        at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:965)
        at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:990)
        ... 19 more
    Caused by: java.lang.ClassNotFoundException: android.support.v4.view.LayoutInflaterFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at net.orfjackal.retrolambda.NonDelegatingClassLoader.loadClass(NonDelegatingClassLoader.java:27)
        ... 32 more
    

    The strangest part is that doing a non-clean build will work, though I suspect that's because it's skipping the retrolambda step.

    This happens with retrolambda 2.0.0 or 2.0.2 (I tried both).

    These are not static method calls.

    opened by dlew 33
  • apt generated directory not found.

    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.

    opened by dbachelder 29
  • Build fails with

    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

    bug 
    opened by cypressious 22
  • app:compileRetrolambdaDebug finished with non-zero exit value 1

    app:compileRetrolambdaDebug finished with non-zero exit value 1

    • Try: Run with --info or --debug option to get more log output.
    • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileRetrolambdaDebug'.
            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.ParallelTaskPlanExecutor.process(ParallelTaskPlanExecutor.java:51)
            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.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:119)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            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:119)
            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:119)
            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:119)
            at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
            at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
            at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
    Caused by: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0\bin\java.exe'' 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:145)
            at org.gradle.api.internal.project.AbstractProject.javaexec(AbstractProject.java:784)
            at org.gradle.api.internal.project.AbstractProject.javaexec(AbstractProject.java:780)
            at org.gradle.api.Project$javaexec$10.call(Unknown Source)
            at me.tatarka.RetrolambdaTask.execute(RetrolambdaTask.groovy:69)
            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)
            ... 54 more
    
    BUILD FAILED
    
    opened by shivamsingh 20
  • Fatal Error: Unable to find package java.lang in classpath or bootclasspath

    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?

    opened by fschoellhammer 18
  • Unused resources when used in Lambda expressions

    Unused resources when used in Lambda expressions

    I have stumbled upon an issue while using retrolambda + Android + lint. Lint verification tool fails on finding strings referenced from string resources when that string is used in same place as a lambda expression. Simple example can be:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.message)
        .setPositiveButton(R.string.close, (dialog, which) -> {
            switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    dialog.dismiss();
                    break;
            }   
        }).show();
    

    This when running ./gradlew lint will cause R.string.close produce a lint warning: The resource R.string.close appears to be unused and in my case fail the build. I could of course ignore that by using tools:ignore or pass Resources fetched String from outside the method call wherever I am using lambda expressions but that doesn't seem the right way. Code should be readable and short, this is the target of lambda expressions as well, so adding code to satisfy lint because of retrolambda seems like going against that principle. For instance this doesn't produce any warnings after adding String string = getString(R.string.close) and referencing it in AlertDialog.Builder.setPositiveButton(...):

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    String string = getString(R.string.close);
    builder.setMessage(getString(R.string.message, body.getError().getData()))
        .setPositiveButton(string, (dialog, which) -> {
            switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    dialog.dismiss();
                    break;
            }   
        }).show();
    
    wontfix 
    opened by maciejpigulski 16
  • Android Gradle Plugin 1.3.0 + Retrolambda breaks compilation of tests

    Android Gradle Plugin 1.3.0 + Retrolambda breaks compilation of tests

    Hello, we've updated Android Gradle Plugin to 1.3.0 (didn't touch anything but this) and now tests with Robolectric does not compile with following error:

    :app:compileRetrolambdaRobolectricDebug
    :app:preRobolectricDebugUnitTestBuild UP-TO-DATE
    :app:prepareRobolectricDebugUnitTestDependencies
    :app:processRobolectricDebugUnitTestJavaRes
    :app:compileRobolectricDebugUnitTestJavaWithJavac
    An exception has occurred in the compiler (1.8.0_45). 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:compileRobolectricDebugUnitTestJavaWithJavac FAILED
    

    robolectric is flavor with robolectric tests.

    Looks like it's related to #23.

    I can file an issue on b.android.com if it's problem of Android Gradle Plugin.

    bug 
    opened by artem-zinnatullin 15
  • Unsupported major.minor version 52.0

    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

    bug 
    opened by mradzinski 14
  • The classes in the dependencies aar seems not to be converted

    The classes in the dependencies aar seems not to be converted

    My project has some of the dependencies which also contains the lambda statement. When I applied this plugin, it was found the lambda code in the project is converted , but the code in the library seems not. Is there any configuration to set so the plugin can change the byte code of the aar/jar files?

    opened by xulianbin 1
  • NoSuchMethodError?

    NoSuchMethodError?

    i was trying add an flutter module(which request host app java1.8 compile compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }) to an existing app(which has to stay in java 1.7 because of butternife and someother pluginin) so i apply plugin me.tatarka:gradle-retrolambda:3.6.1 to the host app. it will compile correct. but in runtime app crash because NoSuchMethodError like:

    07-11 11:57:52.630 6726 6726 E AndroidRuntime: java.lang.NoSuchMethodError: No direct method lambda$initAccountView$2(Landroid/view/View;)V in class Lcom/meituan/epasspo rt/core/controller/extra/DefaultPagerAdapter; or its super classes (declaration of 'com.meituan.epassport.core.controller.extra.DefaultPagerAdapter' appears in /data/app/c om.sankuai.meituan.meituanwaimaibusiness-WyCD2GxSv5brl1ZkqBQvmw==/base.apk!classes3.dex)

    i try more find the crash caused by a library use me.tatarka:gradle-retrolambda:2.3.4. plugin to compile lamda in java 1.7 so what happened here? why different versions of me.tatarka:gradle-retrolambda(3.6.1 in app, 2.3.4 in library) cause crashs? and how could i avoid this runtime crashs(it is dangerous bacause i have no idea how many libraries of my host app use plugin me.tatarka:gradle-retrolambda)?

    opened by SillyRabbite 1
  • Can I use retrolambda after end of 2019?

    Can I use retrolambda after end of 2019?

    Whenever enter into Android Studio, I got follow warning message

    WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'. It will be removed at the end of 2019. For more information, see https://d.android.com/r/tools/task-configuration-avoidance. REASON: It is currently called from the following trace: java.lang.Thread.getStackTrace(Thread.java:1556) com.android.build.gradle.internal.errors.DeprecationReporterImpl.reportDeprecatedApi(DeprecationReporterImpl.kt:79) com.android.build.gradle.internal.api.BaseVariantImpl.getJavaCompile(BaseVariantImpl.java:423) com.android.build.gradle.internal.api.TestVariantImpl_Decorated.getJavaCompile(null:-1) me.tatarka.RetrolambdaPluginAndroid.configureCompileJavaTask(RetrolambdaPluginAndroid.groovy:106) me.tatarka.RetrolambdaPluginAndroid.access$3(RetrolambdaPluginAndroid.groovy:-1) me.tatarka.RetrolambdaPluginAndroid$_apply_closure2.doCall(RetrolambdaPluginAndroid.groovy:53)

    This means getJavaCompile will removed but retrolambda use this. Is there any release plan for this?

    opened by BearCola 2
  • javaVersion don't support

    javaVersion don't support

    i use gradle-retrolambda plugin in Android Studio gradle.build retrolambda { javaVersion JavaVersion.VERSION_1_6 jvmArgs '-arg1', '-arg2' defaultMethods false incremental true } ,i see the compile class file and find the class file code bytecode=52, how to set bytecode=50?

    opened by qq8803128 1
  • 😱ERROR:java.lang.NoSuchFieldError: method resolution failed

    😱ERROR:java.lang.NoSuchFieldError: method resolution failed

    Retrolambda:3.7.0

    retrolambda {
            javaVersion JavaVersion.VERSION_1_7
            jvmArgs '-noverify'
            defaultMethods false
            incremental true
        }
    

    Source code

    public void createOptions(){
            ...
            optionsLayout.setOnCheckedChangeListener((group, checkedId) -> {
                    View checked = group.findViewById(checkedId);
                    if (checked == null){
                        return;
                    }
                    setDate((Date) checked.getTag());
            });
        }
    

    Terminal

    00:00 ERROR: Failed to run Retrolambda
    java.lang.RuntimeException: Failed to backport class: com/wn/lib/ui/component/dialog/DatePickerDialogBuilder
            at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:129)
            at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:107)
            at net.orfjackal.retrolambda.Transformers.backportClass(Transformers.java:47)
            at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:83)
            at net.orfjackal.retrolambda.Main.main(Main.java:28)
    Caused by: java.lang.RuntimeException: Failed to backport lambda or method reference: com/wn/lib/ui/component/dialog/DatePickerDialogBuilder.lambda$createOptions$0(Landroid/widget/RadioGroup;I)V (7)
            at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:42)
            at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.backportLambda(BackportLambdaInvocations.java:187)
            at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.visitInvokeDynamicInsn(BackportLambdaInvocations.java:176)
            at net.orfjackal.retrolambda.asm.ClassReader.readCode(ClassReader.java:1519)
            at net.orfjackal.retrolambda.asm.ClassReader.readMethod(ClassReader.java:1032)
            at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:708)
            at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:521)
            at net.orfjackal.retrolambda.Transformers.lambda$transform$4(Transformers.java:107)
            at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:125)
            ... 4 more
    Caused by: java.lang.NoSuchMethodException: no such method: com.wn.lib.ui.component.dialog.DatePickerDialogBuilder.lambda$createOptions$0(RadioGroup,int)void/invokeSpecial
            at java.lang.invoke.MemberName.makeAccessException(MemberName.java:873)
            at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1005)
            at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1382)
            at java.lang.invoke.MethodHandles$Lookup.findSpecial(MethodHandles.java:1000)
            at net.orfjackal.retrolambda.lambdas.Types.toMethodHandle(Types.java:53)
            at net.orfjackal.retrolambda.lambdas.Types.asmToJdkType(Types.java:26)
            at net.orfjackal.retrolambda.lambdas.LambdaReifier.callBootstrapMethod(LambdaReifier.java:106)
            at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:37)
            ... 12 more
    Caused by: java.lang.NoSuchFieldError: method resolution failed
            at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
            at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:977)
            at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1002)
            ... 18 more
    
    :lib.frame:transformClassesWithRetrolambdaForRelease (Thread[Task worker for ':' Thread 7,5,main]) completed. Took 0.495 secs.
    
    FAILURE: Build failed with an exception.
    
    

    Why Retrolambda don't generate backport class(AbstractPickerDialogBuilder$$lambda$1)?

    opened by TommyTC 0
  • DexArchiveBuilderException: Failed to process ...\rxbinding-2.2.0.aar\..

    DexArchiveBuilderException: Failed to process ...\rxbinding-2.2.0.aar\..

    when i add rxbinding2 :

    > Task :app:transformClassesWithDexBuilderForDebug FAILED
    com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Dev\Tool\Gradle\caches\transforms-1\files-1.1\rxbinding-2.2.0.aar\be69653d3886c7a882a2807c0ce2f816\jars\classes.jar
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
    	at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
    	at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
    	at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:146)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.transform(DexArchiveBuilderTransform.java:405)
    	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    	at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    	at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Dev\Tool\Gradle\caches\transforms-1\files-1.1\rxbinding-2.2.0.aar\be69653d3886c7a882a2807c0ce2f816\jars\classes.jar
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:900)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.lambda$convertToDexArchive$6(DexArchiveBuilderTransform.java:825)
    	at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
    The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
    android {
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
    }
    See https://developer.android.com/studio/write/java8-support.html for details. Alternatively, increase the minSdkVersion to 26 or above.
    
    	at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:124)
    	at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:101)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:895)
    	... 6 more
    Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
    	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:65)
    	at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:43)
    	at com.android.tools.r8.D8.run(D8.java:90)
    	at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:99)
    	... 7 more
    Caused by: com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)
    	at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:116)
    	at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:74)
    	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:59)
    	... 10 more
    

    if i remove rxbingding, project work right. how resolve it? thinks~

    opened by Dev-Wiki 2
Releases(v3.7.0)
  • v3.7.0(Jul 23, 2017)

  • v3.6.1(May 1, 2017)

  • v3.6.0(May 1, 2017)

    • Deprecated oldJdk (and reading from JAVA6/JAVA7_HOME).
    • Deprecated running gradle with java 6 or 7.
    • Fixed incremental build sometimes leaving deleted classes (madisp)
    • No longer fail if old jdk is not defined. Instead run with the current jdk.
    • Bumped default retrolambda version to 2.5.1
    Source code(tar.gz)
    Source code(zip)
  • v3.5.0(May 1, 2017)

  • v3.4.0(May 1, 2017)

  • v3.3.1(May 1, 2017)

  • v3.3.0(May 1, 2017)

    • Fixed certain cases where android tests would fail to compile because wrong classpath was used.
    • Bumped default retrolambda version to 2.3.0
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0-beta4(May 1, 2017)

    • Merged in all changes up to 3.2.5
    • Supports running with other transforms (this is a bit hackey, hopefully we'll get per-variant transforms and it can be implemented far more cleanly).
    Source code(tar.gz)
    Source code(zip)
  • v3.2.5(May 1, 2017)

    • Bumped default retrolambda version to 2.1.0
    • If the commandline parameters are over a certain limit, they will be written to files. This should prevent failures on projects with large classpaths or when a huge number of incremental changes
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0-beta3(May 1, 2017)

  • v3.2.4(May 1, 2017)

  • v3.3.0-beta2(May 1, 2017)

    Experimental support for the new transform api

    • Requires android plugin 1.4.0-beta4

    http://tools.android.com/tech-docs/new-build-system/transform-api

    • Transform api used in library projects.
    • Prints retrolambda output to log level --info known issues:
    • include/exclude are ignored
    Source code(tar.gz)
    Source code(zip)
  • v3.2.3(May 1, 2017)

    • Fixed long builds times on large projects due to https://issues.gradle.org/browse/GRADLE-3283. Note: Running the retrolambda task directly will no longer work, you must run the relevant java compile task instead.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0-beta1(May 1, 2017)

    Experimental support for the new transform api

    • Requires android plugin 1.4.0-beta2

    http://tools.android.com/tech-docs/new-build-system/transform-api

    known issues:

    • Include/exclude are ignored.
    • Does not work in library projects (falls back to the old method).
    • Prints retrolambda output to stdout instead of log level --info.
    Source code(tar.gz)
    Source code(zip)
  • v3.2.2(May 1, 2017)

    • Fixed wrongly deleting lambda classes where the related class is a prefix of the one that actually changed during incremental compilation. (thanks clemp6r!)
    Source code(tar.gz)
    Source code(zip)
  • v3.2.1(May 1, 2017)

  • v3.2.0(May 1, 2017)

    • Support for targeting java 5 with retrolambda.
    • Don't depend on the android gradle plugin being on the classpath when using in pure java projects.
    • Delay calculating classpath for retrolambda. This fixes missing aar libs added by the android gradle plugin.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(May 1, 2017)

    • Major refactoring of android plugin. The method for modifying the javaCompile task is now way less hackey. In fact, it is much closer to the original way that it was done. I had originally abandoned this approach because it was breaking increment compilation is some weird ways. However, I think I have solved it.

    What this means for you: It is now less fickle of plugin application order and way less likely to break other plugins.

    • Properly split bootclasspath if it has multiple paths
    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(May 1, 2017)

    • Fixed occasional "Build exception: cannot call Task.setEnabled(boolean)" error.
    • Fixed minor warning typo.
    • Uploaded to the gradle plugin portal.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(May 1, 2017)

    A whole bunch of changes!

    • Changed the default retrolambda to 2.0.0
    • Added support for default methods, add defaultMethods true to the retrolambda block. Note: due to a current limitation in retrolamba, this will require all of your class files to be fed through retrolambda on each build. This may adversely affect build times.
    • incremental false is no longer deprecated but has different semantics. Instead of being a hack around gradle-retrolambda breaking other plugins, it now only forces all of your class files to be run through retrolambda instead of only the changed ones.
    • Added support for android unit tests, including lambdas in the tests themselves.
    • No longer patch the android jar, modify the classpath instead. This should resolve issues with using gradle-retrolambda with more obscure android sdks, like google glass. This should also speed up a clean build since it doesn't have to do any zipping shenanigans.
    • Ensure the gradle plugin is compiled with java 6 compatibility. This should allow you to run gradle with an older version of java if you don't want java 8 set as the default. This was always the intention, but was broken in the last build.
    • More minor changes to how the java compile task is replaced, this should ensure better compatibility with other plugins. Note: these changes make the plugin application order more important. Make sure you you apply this plugin last.
    • Removed 'retrolambda', now you can only apply the plugin with 'me.tatarka.retrolambda'.
    Source code(tar.gz)
    Source code(zip)
  • v2.5.0(May 1, 2017)

    • A more robust fix for android-apt compatibility. Important: If you were experiencing issues with android-apt previously and updated to this version, you must run gradle build --rerun-tasks once.
    • Deprecate plugin name 'retrolambda' for 'me.tatarka.retrolambda' in preparation to publishing on the gradle plugin portal.
    Source code(tar.gz)
    Source code(zip)
  • v2.4.1(May 1, 2017)

    • Fixed compatibility with android-apt.
    • Fixed typo in one of the thrown exceptions. (tomxor)
    • Support groovy testing (ex. spock). (harningt)
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(May 1, 2017)

    • Better incremental compile method that doesn't break lint and proguard (and probably other tasks). Because of this, retrolambda.incremental is deprecated and does nothing.
    • Better handling of manually setting the retrolamba version with retrolambConfig.
    • Don't use the retrolambda javaagent if using version 1.6.0+.
    • Set the default retrolambda version to 1.6.0.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.1(May 1, 2017)

  • v2.3.0(May 1, 2017)

    • Add ability to set retrolambda.incremental false to disable incremental compilation, since it is incompatible with android lint/proguard.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.3(May 1, 2017)

  • v2.2.2(May 1, 2017)

    • Support a java.home path that does not end in /jre, by using it as it is. This is an issue on OSX which may have a different directory structure.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(May 1, 2017)

    • Ensure output directory is created even if the source set is missing files for the java plugin. Otherwise, compiling the source set would error out.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(May 1, 2017)

    • Added way to add custom jvm arguments when running retrolambda.
    • Disable extractAnnotations tasks since they are incompatible with java 8 sources.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(May 1, 2017)

    • Also check system property 'java.home' for the current java location. IDEs set this but not JAVA_HOME, so checking here first is more robust. (aphexcx)
    Source code(tar.gz)
    Source code(zip)
Owner
Evan Tatarka
Evan Tatarka
This repository contains a simple script that lets you kill gradle and kotlin daemons.

AndroidDaemonKiller This repository contains a simple script that lets you kill gradle and kotlin daemons. After updating gradle or kotlin or checking

Paul Woitaschek 25 Dec 3, 2022
Gradle Autocomplete for Powershell

Gradle Autocomplete for Powershell The autocompletion works by creating a .tasks file in the project folder at the first time it is executed.

null 7 Jul 12, 2022
BTW-gradle is a development environment for the Better Than Wolves mod

BTW-gradle BTW-gradle is a development environment for the Better Than Wolves mod Quick Start Download the example Change settings.gradle and build.gr

Better Than Wolves Community 2 Feb 24, 2022
Cache support for any video player with help of single line

Video cache support for Android Table of Content Why AndroidVideoCache? Features Get started Recipes Disk cache limit Listen caching progress Providin

Alexey Danilov 5.1k Jan 6, 2023
Ktorm migration support

ktorm-migration Ktorm migration support Status Needs a full tutorial, supporting tools, and more testing, but otherwise complete. Usage In your app, u

KTORM.ORG 12 Sep 15, 2022
I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process.

Json2Java I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process. What this tool can do right

Jon F Hancock 303 Oct 8, 2022
A plugin written for my 1.12.2 anarchy server

A plugin written for my 1.12.2 anarchy server. I don't recommend using any of the fixes, most of them are garbage. Pull requests are welcome.

comendantmc 4 Jun 6, 2022
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 30.5k Dec 27, 2022
AndroidPermissions 4.2 0.0 Java Android M was added to check Permission. but Permission check processing is so dirty.

Android Permissions Checker Android M was added to check Permission. but Permission check processing is so dirty. This Project is to be simple, Checki

Steve SeongUg Jung 340 Nov 11, 2022
Google core libraries for Java

Guava: Google Core Libraries for Java Guava is a set of core Java libraries from Google that includes new collection types (such as multimap and multi

Google 46.5k Jan 1, 2023
A Java client for the Sixpack A/B testing framework https://github.com/seatgeek/sixpack

sixpack-java A Java client for SeatGeek's Sixpack a/b testing framework: https://github.com/seatgeek/sixpack Installing Sixpack-java is currently only

null 135 Oct 7, 2022
Simple Artificial Neural Network java library

SANN Simple Artificial Neural Network java library WIP Creating neural network Variant 1 //create new net (input, hidden, default len, output) Net net

Korpusov Maxim 14 Oct 11, 2022
SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreters directly on the Android device.

#Scripting Layer for Android (SL4A) SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreter

Damon Kohler 2.3k Dec 23, 2022
An application for runners and cyclists. Allows you to monitor your physical activity, weight and receive reminders about workouts.

An application for runners and cyclists. Allows you to monitor your physical activity, weight and receive reminders about workouts.

Just_Amalll 3 Feb 7, 2022
A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev-tools

A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev tools Contribution Add the description of the benchm

null 13 Dec 16, 2022
A Job Queue specifically written for Android to easily schedule jobs (tasks) that run in the background, improving UX and application stability.

Development in this repository is stopped. Future development continues on https://github.com/yigit/android-priority-jobqueue ========================

Path Mobile Inc Pte. Ltd. 2.4k Dec 9, 2022
An android library for displaying fps from the choreographer and percentage of time with two or more frames dropped

DEPRECATED TinyDancer is deprecated. No more development will be taking place. Check out the Google Android developer documentation for UI performance

Friendly Robot 1.9k Jan 3, 2023
📄The reliable, generic, fast and flexible logging framework for Android

logback-android v2.0.0 Overview logback-android brings the power of logback to Android. This library provides a highly configurable logging framework

Tony Trinh 1.1k Jan 8, 2023
It makes a preview from an url, grabbing all the information such as title, relevant texts and images. This a version for Android of my web link preview https://github.com/LeonardoCardoso/Link-Preview

LeoCardz Link Preview for Android It makes a preview from an url, grabbing all the information such as title, relevant texts and images. Visual Exampl

Leonardo Cardoso 420 Nov 19, 2022