AndroidStudio3.0使用Java8语言功能的方法,R

2017-10-26  本文已影响169人  小小程序员jh

原文参考链接:
https://www.2cto.com/kf/201710/691546.html

使用Java8语言功能
前言:
android支持全部Java7语言功能,支持部分的Java8语言功能(默认和静态接口方法,Lambda表达式,重复注解,方法引用,类型注解)。

注意点:
Android开发运用时候,将项目的源和目标兼容值保留为Java7,但可以使用JDK8进行编译。
需使用Jack工具链来支持Java8语言功能,但是开发工具AndroidStudio2.1及其以上才支持Jack工具链。
配置使用Java8和Jack:
在项目中build.gradle中配置Java8和Jack的启用:
android {
...
defaultConfig {
...
jackOptions {
enabled
true

}
}

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

注意点
Instant Run不能用于Jack , 依赖中间类文件的工具(例如,Lint,Jacoco)不能用于Jack。
开发中遇到com.android.jack.ir.JNodeInternalError异常
在使用Jack来开启Java8语法中,依赖了Glide v4库,造成冲突:

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

com.android.jack.ir.JNodeInternalError:

java.lang.Exception: java.lang.AssertionError: No yet implemented

官方最新通告
Jack toolchain is 已经弃用。若是原本项目中使用了Jack,可以继续使用。但是,在AndroidStudio3.0中可能会移除Jack的依赖。因此,建议禁用Jack,使用AndroidStudio的默认toolchain,它支持Java8。

解决方式
第一种:使用androidStudio3.0版本
第二种:使用retrolambda库(非官方)
Retrolambda库的使用
介绍
一个Gradle 插件,用于在Java 6,7 和Android上支持Java Lambda。

使用步骤
1.在项目的build.gradle中添加依赖

buildscript {
repositories {
jcenter()
}
dependencies {
classpath
'com.android.tools.build:gradle:2.3.2'

//gradle-retrolambda配置
classpath
'me.tatarka:gradle-retrolambda:3.7.0'
}

}
2. 在Module的build.gradle中添加部分代码

apply plugin:'com.android.application'

//gradle-retrolambda配置
apply plugin:'me.tatarka.retrolambda'

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

}

}

3. 添加混淆规则
在proguard-rules.pro文件中,添加以下规则:

Gradle Retrolambda混淆规则

-dontwarn java.lang.invoke.*

-dontwarn *$$Lambda$

上一篇下一篇

猜你喜欢

热点阅读