当前位置:   article > 正文

AndroidStudio 中开启Java8语法和Retrolambda库的使用_android studio设置java语法

android studio设置java语法

使用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
  }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意点

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
  • 1
  • 2
  • 3

官方最新通告

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

解决方式

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'
    
    }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 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
      }
    
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 3. 添加混淆规则

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

     #Gradle Retrolambda混淆规则
     -dontwarn java.lang.invoke.*
     -dontwarn **$$Lambda$*
    • 1
    • 2
    • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/476608
推荐阅读
相关标签
  

闽ICP备14008679号