0%

Android Studio 4.0 的新玩意兒

whats-new-android-studio-4.0

Android Studio 的新東西

Android Studio 4.0 穩定版於 2020.05 發佈了,本篇內容將以自己的認知做了分類整理。

Android Gradle plugin 4.0.0

本次發佈的 Android Gradle plugin 4.0.0 有著非常多的更新,被列在簡介中的兩個特性:可向下相容 Android 舊版本的 Java 8 desugaring 和 feature-on-feature dependencies。其餘完整的釋出說明,請見Android Gradle plugin 4.0.0 的 release notes

關於視覺設計的部份

這次在 Android Studio 的更新在視覺上多了幾個有趣的東西

Motion Editor (動態編輯器)

MotionLayout 是一個 ConstrantLayout 的子物件。如其名所示,它比起 ConstrantLayout 來說,就是多了讓佈局裡的物件能動起來的屬性設定。

它被新增在 androidx.constraintlayout:constraintlayout 這個函式庫的 2.0 以後的版本。

而 Motion Editor 就是讓我們在編輯器上,可以播放觀看到該物件在佈局裡的移動變化,如下圖所示:

motion_animation_preview

(圖片來源為 Release Note)

這個工具也提供我們能將原本的 constraint layout ,直接轉換成 motion layout ,想了解更的話可以直接看開發文件哦!

Layout Inspector (佈局監控工具)

直接讓我們可以視窗中看到正執行在設備上的畫面,我們透過這個工具的操作,可以看到當前佈局的樹狀階層、呈現畫面以及該佈局屬性,還能直接指回 xml 檔裡。
live-layout-inspector

同時,還有一個視覺上的新功能:3D view ,讓我們能在視窗裡用滑鼠操作畫面,以 3D 呈現的方式轉動,監看各佈局元件的階層關係。
live-layout-inspector-3d-view

Layout Validation (佈局驗證)

Layout validation 是讓我們在設計、撰寫 layout 檔時,可以將當前畫面,同時模擬呈現在不同裝置設定的視覺化工具。
layout-validation

除了可以自定義模擬裝置規格外,這邊還有四種配置讓我們選擇呈現

  • Pixel
  • Custom
  • Color Blind
  • Font Sizes

有興趣深入了解的朋友,可以直接進到開發文件看看。

關於編譯

這個部份是要在 Android Gradle plugin 4.0.0 以後的版本,搭配 Android Studio 4.0 與其之後的版本才能使用。

Build Analyzer (建置分析工具)

開發後建置到行動裝置上的等待,一直是讓人不耐的。這個新的分析工具提供了一份視覺化與列表,讓我們可以從中去了解、去診斷是哪個環節特別費時,進而去最佳化或是調整可能沒有弄好的設定。
build-attribution-critical-path

(圖片來源為 Release Note)

Java 8 library desugaring in D8 and R8

簡言之,在只有 D8 以及 R8 可用的 Android Studio 4.0 及 Android Gradle plugin 4.0.0 以後的新版本中,開始全面支援 Java 8 的原生特性啦。在不用更動 minimum API level 的狀況下,根據建議調整模組裡的 build.gradle 設定後,就可以使用,且向下相容於舊版本的 Android。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}

compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

(來源為 release notes)

Feature-on-feature dependencies

在此前的使用數個動態功能模組 (dynamic feature modules) 時,即便它們其中可以有上、下的附屬關係,我們仍需將他們強定附屬於一個基礎模組上。

如下圖的官方範例來說,:video 依存於 :camera,我們仍需將它設定附屬於 :app
feature-on-feature-dependencies

如果今天 :camera 以及 :video 都有附屬一個我們看不見的 :video-data 的模組,在編譯時便會發生模組重複引入的錯誤。

在新的版本中,啟用了 feature-on-feature dependencies (功能堆疊的附屬性) 後,便能讓模組的附屬設定如下圖所示,
feature-on-feature-dependencies

build.gradle 裡,我們可以這麼寫

1
2
3
4
5
6
7
8
9
10
// In the build.gradle file of the ':video' module.
dependencies {
// All dynamic feature modules must declare a dependency
// on the base module.
implementation project(':app')
// Declares that this module also depends on the 'camera'
// dynamic feature module.
implementation project(':camera')
...
}

(來源為 release notes)

如此解決重複引入附屬模組的現象。更細節的說明請參見 A Quick Look at Feature-on-Feature Dependencies in Android Gradle Plugin 4.0.0 這篇文章。

而我們要啟用這個功能的話,別忘做依下動作設定

Help > Edit Custom VM Options

開啟 vmpoptions 設定檔後,加入

1
-Drundebug.feature.on.feature=true

Dependencies metadata (附屬模組的 metadata)

在 Android Gradle plugin 4.0.0 以後的版本,可以將這個 metadata 被編譯進我們的 app 裡。根據 release notes 的說明裡,當我們將 app 上傳到 Google Play Console 後,可以有以下兩個好處

  • 針對使用的 SDKs 與 dependencies 給予提示已知的 issues。
  • 可以收到這些 issues 的解法。

在釋出的 APP 中,這份 metadata 也會被壓縮、加密。如果我們想在本機裡面找到這份檔案,它被放在 <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt

如果我們不想要將這份資訊放出來,那我們可以在專案模組的 build.gradle 檔案中這麼設定:

1
2
3
4
5
6
7
8
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}

(來源為 release notes)

關於語言/平臺

Kotlin Android live templates

增加 Kotlin 的 Live templates (即時樣版) 支援。比方說,我們可以輸入 toast 再按下 Tab 鍵,IDE 就能快速幫我們帶出 Toast 的語法樣版。
想要知道有哪些能用,請開啟

  • Windows

    File > Settings > Editor > Live Templates

  • MacOS

    Android Studio > Preferences > Editor > Live Templates

    展開 AndroidKotlin 就能看到,且能再自己去新增。
    live-template

Fragment wizard (and new fragment templates)

Fragment wizard (Fragment 能手),現在新增 fragment 時,可以像 activity 一樣,能用 gallery (畫廊) 的視覺化畫面來選擇、建立。

  • Windows/macOS

    File > New > Fragment > Gallery

    fragment-wizard

    fragment-gallery

Smart editor features for code shrinker rules

R8 下的混淆/壓縮(shrinker)的提示
shrinker-smart-editor

(圖片來源為 Release Note)

支援 Kotlin DSL script (Kotlin 原生劇本)

Android Gradle plugin 開始支援 Kotlin DSL build script 檔(*.kts)。更新後,在一些 Android Studio 的版本裡,除了在 Project Structure 的視窗與建構劇本能快速修正外,也能讀、寫 Kotlin build script (Kotlin 建構劇本) 檔案。

Expanded camera support in Android emulator

這個是針對要搭配 Android 11 映像檔的模擬器才能使用的特性

  • RAW capture
  • YUV reprocessing
  • Level 3 devices
  • Logical camera support

後話

  • 關於專有名詞的翻譯
    • 延續自己以來的習慣,不見得會去用網路上常見的翻譯用詞。
    • 查了翻譯,搭配前後文,用了自己認為合適的語意去翻譯,還請大家多多指教。
    • 基本上,也想避免為了翻譯而硬翻某個字詞,讓大家在閱覽時,出現難以理解文意的狀況。所以有些項目就直接從官方的 release note 直接搬過來了 XD
  • 沒有寫出來的 release notes 裡的項目
  • 最後的最後
    • 根據自己的想法做了不同於官方分類項目的整理,結果寫著寫著,似乎還是有點依著釋出文件在寫…
    • 如果本篇裡面有錯誤的描述,還望各位不吝指教,感謝大家的觀看!

參考來源