美文网首页
Android Studio支持Java8方法支持lambda

Android Studio支持Java8方法支持lambda

作者: 小猪x | 来源:发表于2017-10-25 17:01 被阅读0次

连接:http://www.jianshu.com/p/84126a1fd15a
一、按照方法1处理会报错

编译器 (1.8.0_91) 中出现异常错误。如果在 Bug Database (http://bugs.java.com) 中没有找到该错误, 
请通过 Java Bug 报告页 (http://bugreport.java.com) 建立该 Java 编译器 Bug。请在报告中附上您的程序和以下诊断信息。谢谢。
com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到java.lang.invoke.MethodType的类文件

貌似目前只有Android7.0才支持Java 8,推荐非官方兼容库retrolambda

参考:http://blog.csdn.net/OnlyWenga/article/details/64906641 (有待验证)

二、按照方法2处理,也会报错

Error:Jack is required to support java 8 language features. 
Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.

经过测试需要加上

defaultConfig.jackOptions.enabled = true、

解决方法:

1、app的build.gradle

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.canhui01li.myapprxretrofitdagger"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //支持Java8,这样才能使用Lambda----------
    defaultConfig.jackOptions.enabled = true //关键就是这个,可以支持java8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    //支持Java8,这样才能使用Lambda-------
}

2、其他子model的build.gradle也要引入以下2个地方

 apply plugin: 'me.tatarka.retrolambda' //支持Java8-lambda

  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

Ps: library的model不能加 defaultConfig.jackOptions.enabled = true

完整代码

apply plugin: 'com.android.library'
apply plugin: 'me.tatarka.retrolambda' //支持Java8-lambda
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //支持Java8---------------------
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    //支持Java8---------------------

}

3、打开Project的build.gradle,添加

classpath 'me.tatarka:gradle-retrolambda:3.6.1'

例如

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath 'me.tatarka:gradle-retrolambda:3.6.0'  //Retrolambda使用
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

4、File ->Project structure -> JDK loction:导入自己的jdk 1.8 版本

例如

C:\Program Files\Java\jdk1.8.0_91



缺点:

1、感觉编译速度很慢

参考文章 https://juejin.im/entry/58854b188fd9c50067fadaf7

2、for循环效率。待验证 有些说很慢

http://www.cnblogs.com/yiwangzhibujian/p/6965114.html



学习文章:

在Android项目中使用Java8
http://www.jianshu.com/p/a258d034307c

相关文章

网友评论

      本文标题:Android Studio支持Java8方法支持lambda

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