美文网首页
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