美文网首页
AndroidStudio3.0使用Java8语言功能的方法,R

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

作者: 小小程序员jh | 来源:发表于2017-10-26 14:35 被阅读169次

    原文参考链接:
    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$

    相关文章

      网友评论

          本文标题:AndroidStudio3.0使用Java8语言功能的方法,R

          本文链接:https://www.haomeiwen.com/subject/kfkkpxtx.html