摘要:現在爸爸終于讓平臺支持了,這篇文章中便來和大家聊聊如何在項目中配置使用。要想在項目中使用的新特性,需要將你的升級到及以上版本,并采用新的編譯。
前言轉載請注明出處:https://zhuanlan.zhihu.com/p/23279894
在過去的文章中我介紹過Java8的一些新特性,包括:
Java8新特性第1章(Lambda表達式)
Java8新特性第2章(接口默認方法)
Java8新特性第3章(Stream API)
之前由于Android平臺不支持Java8,如果我們想在Android項目中使用Lambda表達式、Stream API等Java8中的新特性就必須使用Retrolambda、Lightweight-Stream-API等第三方開源庫來實現。現在Google爸爸終于讓Android平臺支持Java8了,這篇文章中便來和大家聊聊如何在Android項目中配置使用Java8。
遺憾的是目前Android平臺僅支持Java8的部分新特性,當我們在開發面向Android N及以上版本的應用時(即minSdkVersion>=24),可以使用如下新特性:
Lambda表達式(Lambda Expressions)(也可以在minSdkVersion<24的情況下使用)
方法引用(Method References)(也可以在minSdkVersion<24的情況下使用)
Stream API(Streams)
接口默認方法(Default Methods)
重復注解(Repeating Annotations)
簡單的說就是現在你的項目要想使用Stream API、接口默認方法和重復注解就要求你的minSdkVersion>=24,而Lambda表達式和方法引用則對minSdkVersion無要求。關于這些新特的使用及分析可以看看我之前的文章。
Jack(Java Android Compiler Kit)要想在Android項目中使用Java8的新特性,需要將你的Android Studio升級到2.1及以上版本,并采用新的Jack(Java Android Compiler Kit)編譯。新的 Android 工具鏈將 Java 源語言編譯成 Android 可讀取的 Dalvik 可執行文件字節碼,且有其自己的 .jack 庫格式,在一個工具中提供了大多數工具鏈功能:重新打包、壓縮、模糊化以及 Dalvik 可執行文件分包。
以下是構建 Android Dalvik 可執行文件可用的兩種工具鏈的對比:
舊版 javac 工具鏈:
javac (.java --> .class) --> dx (.class --> .dex)
新版 Jack 工具鏈:
Jack (.java --> .jack --> .dex)
為了在項目中使用Java8,我們還需要項目module中的gradle.build文件中加入如下代碼:
android { compileSdkVersion 24 buildToolsVersion "24.0.3" defaultConfig { applicationId "me.baron.hellojava8" minSdkVersion 24 targetSdkVersion 24 versionCode 1 versionName "1.0" jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }使用
進行上述配置后大家就可以在Android項目中盡情的探索使用Java8的新特性了。比如之前我們實現button的點擊事件時需要這這樣寫:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setText("lalala"); } });
現在我們便可以使用Java8的Lambda表達式來實現了:
button.setOnClickListener(v -> v.setText("lalala"));
如果你項目的minSdkVersion>=24,我們還可以使用Stream API。比方說有一個形狀集合shapes,現在我們想把所有藍色的形狀提取到新的List里。通過Stream API則可以很輕易的辦到:
List總結blue = shapes.stream() .filter(s -> s.getColor() == BLUE) .collect(Collectors.toList());
Java8的新特性并不是本文的重點,對此有興趣的同學可以去翻看我之前的文章。當前Jack編譯器還有諸多限制,比如在使用新的Jack工具鏈時會禁用Instant Run以及前面提到的新特性對我們的最低支持版本和編譯版本有要求等等(我猜想Jack對Buck、Layoutcast、Freeline等編譯方案也會有影響,沒做過驗證,有了解的同學可以在評論區留言和大家交流下);總之要想在Android項目中愉快的使用Java8全部的新特性還需時日。期待Google爸爸盡快優化吧!
參考資料:
https://developer.android.com/guide/platform/j8-jack.html
https://medium.com/@sergii/java-8-in-android-n-preview-76184e2ab7ad
===
如果大家喜歡這一系列的文章,歡迎關注我的知乎專欄、GitHub、簡書博客。
知乎專欄:https://zhuanlan.zhihu.com/baron
GitHub:https://github.com/BaronZ88
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66518.html
摘要:方法即為收集器,它接收高階函數和的后端掘金年的第一天,我坐在獨墅湖邊,寫下這篇文章。正因如此,所以最全系列教程后端掘金是從版本開始引入的一個新的,可以替代標準的。 設計模式之單例模式 - 掘金前言 作為一個好學習的程序開發者,應該會去學習優秀的開源框架,當然學習的過程中不免會去閱讀源碼,這也是一個優秀程序員的必備素養,在學習的過程中很多人會遇到的障礙,那就是設計模式。很多優秀的框架會運...
閱讀 2261·2023-04-26 01:50
閱讀 718·2021-09-22 15:20
閱讀 2597·2019-08-30 15:53
閱讀 1600·2019-08-30 12:49
閱讀 1714·2019-08-26 14:05
閱讀 2714·2019-08-26 11:42
閱讀 2310·2019-08-26 10:40
閱讀 2604·2019-08-26 10:38