AndroidStudio 中开启Java8语法和Retrolambda库的使用
2017-10-20 19:04
197 查看
使用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版本,详细介绍AndroidStudio3.0支持Java8
第二种:使用retrolambda库(非官方)
Retrolambda库的使用
介绍:一个Gradle 插件,用于在Java 6,7 和Android上支持Java Lambda。
了解具体详情,点击gradle-retrolambda项目。
使用步骤:
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$*
相关文章推荐
- java语法——使用事件适配器
- 使用java基本语法实现的小程序(从1000年1月1日到9999年12月31日所有的对称日)
- Java语法基础之函数的使用说明
- Java学习笔记——MySQL的安装使用以及SQL语法简介
- java 断言 assert 初步使用:断言开启、断言使用
- [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)
- java中支持Label语法,不过要配合流程控制语句使用(备忘)
- Java_语法基础_优先使用整型池
- java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
- JAVA语法基础之函数的使用说明
- java正则表达式语法详解及其使用代码实例
- Java编程语法——compartator在sort中的使用
- Java语法基础之函数的使用说明
- java 断言 assert 初步使用:断言开启、断言使用
- 在JAVA中使用Oracle的MERGE以及INSERT ALL语法
- Java & C++ 数组声明和使用语法对比
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- java正则语法、及使用
- java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结