Android Studio 使用Java 8 混淆出错

来源:互联网 发布:thinkphp oa系统源码 编辑:程序博客网 时间:2024/06/05 13:26

Error:Execution failed for task ‘:app:transformJackWithJackForRelease’.

com.android.build.api.transform.TransformException: com.android.builder.core.JackToolchain$ToolchainException: Jack configuration exception.
Error while parsing ‘/Users/…/AndroidStudioProjects/…/app/proguard-rules.pro’:83

介绍这个问题前首先要明白Android Studio 配置java8的两种方法:

1、在主 module (app) 的 build.gradle 里配置,开启 jack 编译器,使用 Java8 进行编译。

apply plugin: 'com.android.application'android {    ...    defaultConfig {         //开启jack编译器        jackOptions {            enabled true        }    }    //java8 配置    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    } }

上面的错误就是因为 jack 编译器 混淆产生的,这种方法还没找到解决的办法。所以请切换到第二种配置。

2、使用插件retrolambda
在项目的build.gradle(Project)文件中添加

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.3.3'        classpath 'me.tatarka:gradle-retrolambda:3.6.1'//这个是重点    }}

然后在build.gradle(app)文件中添加

apply plugin: 'com.android.application'apply plugin: 'me.tatarka.retrolambda'//这个是重点android {   ...    //java8 配置    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    } }dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    //这个是重点    retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:+'}

使用第二种配置方法然后在 proguard-rules.pro文件中添加以下混淆规则就OK了。

## see https://github.com/evant/gradle-retrolambda for java 8-dontwarn java.lang.invoke.*