Android Studio 使用Java8全知全解

說明:本篇整理自Android開發官方文檔

Android Studio 3.0 及以上版本支持所有 Java 7 語言功能,以及部分 Java 8 語言功能。

內部原理

如下圖 所示,AS默認工具鏈通過 javac 編譯器的輸出執行字節碼轉換(稱爲 desugar),從而實現Java8的語言特性功能,這樣我們就能從容的在代碼中使用Java8特性了。

這塊解釋一下,之前看的《深入理解Java虛擬機》中 講到,爲了更好的支持動態類型語言,Java7通過JSR292給JVM增加了一條新的字節碼指令:invokedynamic,JVM指令集中新增了 InvokeDynamic指令,雖然java7本身的JDK語法編譯器無法用到,但這爲Java8的Lambda表達式的時間提供了底層基礎支持,由AS的編譯工具幫我們支持Java8語法。
android編譯打包過程

具體步驟

在工程的模塊中的 build.gradle 文件中添加以下代碼

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java8 特性和API支持說明

在這裏插入圖片描述
總結:

  1. 如果只使用Java8中的lambda表達式及函數引用,重複註解功能,對項目的編譯版本是沒有任何限制的
  2. 使用Java8的Stream流,Function等API,需要minSdkVersion 24 或以上
  3. 特殊API MethodHandle.invoke 或 MethodHandle.invokeExact,則需指定 minSdkVersion 26 或以上
停用對 Java 8 語言功能的支持

可在 gradle.properties 文件中加入以下代碼來停用此支持:

android.enableDesugar=false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章