Android Studio 新特性詳解

Android開發者 發表於 2022-01-25
Android

在 2021 年早些時候舉辦的 Google I/O 大會上,我們詳細介紹了 Android Studio Arctic Fox 的主要功能,該版本目前已經位於 穩定版 的釋出渠道供大家下載使用。Android Studio Arctic Fox 主要聚焦於以下三個方面的改進:

  1. 設計 : Arctic Fox 是首個包含 Jetpack Compose 的支援工具及大量設計工具和檢查器的穩定版本,從而讓您可以更輕鬆地建立和預覽介面。
  2. Android 裝置支援 : Arctic Fox 包含大量針對 Android 裝置的功能,如 Wear OS 上的心率感測器,以及支援 Google TV 的新版 Android TV 模擬器等功能。
  3. 開發效率改進 : 我們對 Android Studio 的底層進行了改進,同時也帶來了 WorkManager 工具,以幫助開發者提高開發效率。

您可能已經注意到,Arctic Fox 的繼任者 Android Studio BumbleBee 目前已經可以在 Beta 版 釋出渠道下載使用了。我們在這個版本加入了許多激動人心的改進,包括首次支援了 Material You、進一步優化了 Jetpack Compose 工具以及更多的開發效率改進,您還可以通過 BumbleBee 針對使用了 Android 12L 的大屏裝置縮放您的應用。接下來,我們將會為您詳細介紹此版本的代表功能與改進,並帶您一窺我們為未來版本的 Android Studio 所開發的最新功能。

https://www.bilibili.com/vide...

△ Android Studio 新特性詳解

構建相關

在體驗 Android Studio 的新特性前,您可能需要先升級您的專案。您可以使用 AGP (Android Gradle Plugin) 升級助手來幫您完成這一任務。在匯入您的專案時,您可以點選右下角出現的 "Begin Update",然後點選 "Show Usage",此時,介面上將展示專案即將發生哪些變化。您可以直接接受這些建議並執行匯入。

△ 使用 AGP 升級助手對專案進行升級

△ 使用 AGP 升級助手對專案進行升級

構建配置快取

在專案的 AGP 升級為最新版本後,我們便可以開始構建專案了。在構建完成後,我們可以開啟 Build Analyzer 皮膚,並檢視這裡提供的一些建議。在這些建議中,我們重點關注 Build Configuration (構建配置) 時間。

我們點選 "Optimize this",並在隨後的介面中點選 "Try Configuration cache in a build" 按鈕,Android Studio 便會在啟用配置快取的情況下執行您的構建。這一過程會檢查您的構建是否與配置快取相容——本例中是相容的。點選 "Enable Configuration Cache" 按鈕便可啟用配置快取提升專案的構建速度。

△ 啟用配置快取

△ 啟用配置快取

啟用配置快取的操作,本質上是在專案的 gradle.properties 檔案中設定了環境變數 org.gradle.unsafe.configuration-cache=true。在本例中,gradle.properties 檔案中還設定了 android.enableJetifier=true,這一環境變數用於將依賴庫中的 Support 包遷移為等效的 Android X 軟體包。我們計劃在 Build Analyzer 中新增一個設定,用於檢查是否有必要啟用 Jetifier。您可以試著自己關閉 Jetifier,如果關閉後仍可以構建成功,則可以減少專案的構建時長。

支援非傳遞 R 類

另一個與構建相關的功能,是對非傳遞 R 類的支援。為了演示這一功能,我切換到了一個更大的專案——k-9 郵件應用。我們首先點選 "Refactor",然後選擇 "Migrate to Non-Transitive R Classes"。此操作將分析整個專案,找到所有引用資源的原始檔,並將它們重新編寫為專案本地檔案,與此同時還會在 gradle.properties 中新增 android.nonTransitiveRClass=true 來開啟構建系統中的特定設定。這將使構建能夠跳過大量的資源合併,從而有助於提高效能。如果您的專案中包含大量的模組和資源,強烈建議您嘗試這一功能。

Lint 增量快取

有關構建速度的最後一個功能與 lint 有關。我們經常從使用者那裡收到的一個請求,便是希望 lint 在 CI 伺服器上能夠執行得更快。因此,我們從 Bumblebee Canary 13 版本開始支援增量 lint 任務和快取,其中也包括遠端快取。

我們的 k-9 專案由大約 30 個模組組成,共約十萬行程式碼,分佈在約 1,100 個原始檔中。在啟用了快取且沒有對專案進行任何更改的情況下,我們首先 clean 專案,以保證專案中沒有任何 lint 報告。接下來我們再次執行 lint,可以看到我們的任務只用了幾秒鐘便從快取匯入了這些報告。

△ 模擬 CI 任務時,Lint 拉取了快取

△ 模擬 CI 任務時,Lint 拉取了快取

接下來我們更進一步,對檔案中的內容進行修改,這對於 lint 是一個新事件。再次重複前面的操作: 執行 clean,然後執行 lint (模擬 CI 的構建流程),可以看到,lint 任務只重新分析了這個更改的模組,並再次匯入了很多快取的結果。與舊版 lint 需要三分半鐘的時間相比,現在我們可以在 17 秒內看到這個專案更新後的 lint 報告。

介面卡頓追蹤

既然我們聊到了效能問題,那不妨看一下 Profiler。我們目前還在進行最後潤色的功能之一,便是在 Android Studio 中提供追蹤卡頓的功能。卡頓是指介面跟不上幀率的現象。想要追蹤卡頓,首先需要在 Profiler 中錄製一個軌跡。

接下來我們可以切換到 Frames 檢視。現在在 Android 11 和 12 中可以捕獲幀的生命週期,如下圖所示是捕獲到的幀。我將按照這些幀在應用中的持續時間對它們進行排序。

△ 在錄製的軌跡中,幀時長排序後的結果

△ 在錄製的軌跡中,幀時長排序後的結果

本例中,幀 1748 看起來非常緩慢。我們選中它,就可以在窗格的左側看到該幀的生命週期。這部分的顯示使用了顏色編碼,當前幀對應的顏色為紫色,在等待 GPU 和組合的位置顯示了相同的紫色條。我們只要將檢視縮小一些,就可以看到它何時出現在螢幕上。可以看到,前一幀在螢幕上停留了很長時間,這就是我們說的卡頓。

△ 幀生命週期

△ 幀生命週期

下一步便是檢視應用和渲染執行緒。我們可以在介面中滑動選擇一個區域,就可以看到應用在此期間做了什麼,從而找出卡頓的來源。我認為在這段錄製中,應用試圖同時載入一堆紋理,這就是導致卡頓的原因。

圖形編輯器

我們把關注的焦點從效能切換到圖形編輯器。假設我們有一個相機介面,上半部分是取景器,而下半部分則包含了一些圖片的標籤。我們想要實現的是,當裝置在橫向和縱向之間移動時,相機介面可以適當地旋轉。

△ 本例中的相機介面

△ 本例中的相機介面

MotionLayout 旋轉動畫

我們可以使用 MotionLayout 實現這一功能。相機有兩種狀態: 正常的縱向狀態和橫屏狀態。我們只需要在 MotionLayout 的 XML 檔案中設定對應的 constraintRotate 屬性;然後在 AndroidManifest.xml 中,鎖定 Activity 的螢幕方向為縱向即可。

<ConstraintSet
    android:id="@+id/portrait_L90"
    motion:deriveConstraintsFrom="@id/landscape_left"
    motion:constraintRotate="left">

</ConstraintSet>

△ 配置 constraintRotate 屬性

您可以通過圖形編輯器播放轉換動畫,來驗證修改之後的效果:

△ 在圖形編輯器中預覽控制元件的旋轉動畫效果

△ 在圖形編輯器中預覽控制元件的旋轉動畫效果

嵌入式模擬器 & Device Manager (裝置管理器)

您可以通過模擬器檢查上面的程式碼在真實裝置中的執行情況。我們已經將模擬器嵌入到 Android Studio 中,並花了一年時間增強其穩定性並做了許多優化。從 Bumblebee 開始,嵌入式的模擬器將成為預設配置。在示例專案啟動後,您也許會注意到,當相機處於活動狀態時,Android Studio 會給出如何在相機虛擬場景中進行導航的提示。我們只需按住 Shift 鍵,就可以在模擬器呈現給相機的虛擬場景中移動視角。

嵌入式模擬器也可以訪問所有擴充套件控制元件。例如,您可以設定導航路線、訪問虛擬感測器等。在本例中,我們可以改變裝置姿態來測試旋轉螢幕效果。在下圖中可以看到,隨著我向一側旋轉裝置,模擬器的介面也在更新,從而與感測器保持同步旋轉。

△ 通過擴充套件控制元件改變裝置姿態

△ 通過擴充套件控制元件改變裝置姿態

模擬器進行這類操作還是稍顯繁瑣,若您想使用實體裝置進行測試,便會用到另一個新功能——Device Manager。我們移除了 AVD 對話方塊,並將裝置整合到了 Device Manager 中。現在,模擬器中的虛擬裝置和計算機連線的實體裝置都會在這裡集中顯示。

我們還在探索一項功能,以便您更輕鬆地在 Design 介面中測試動畫效果,而無需在實體裝置上執行專案。在前文中,您已經看到如何在 Design 介面中播放動畫。如下圖所示,您也可以在 Design 介面中旋轉螢幕。這樣就可以在編輯動畫的同時測試動畫。

△ 在圖形編輯器中模擬旋轉螢幕

△ 在圖形編輯器中模擬旋轉螢幕

Android 12L 螢幕適配 & Visual Linting

讓我們來看另一個佈局。下圖是一個歡迎介面,我們設定了將 "WELCOME" 訊息從邊緣移動到螢幕中央的動畫效果。所以動畫是從螢幕之外開始的。

△ 示例介面

△ 示例介面

Android 12L 新增了裝置類的概念,其首要任務便是處理不同型別的大螢幕裝置間的檢視相容性問題。Android Studio 的圖形編輯器提供了許多參考裝置。我將檢視切換到平板電腦模式,可以看到 "WELCOME" 訊息並不在螢幕外,它在一開始就被顯示了出來。這樣我就可以知道,該動畫在大螢幕上的效果不佳。

本例中,我通過檢視各種不同的螢幕尺寸發現了問題所在,但我們並不希望您每次都進行如此複雜的操作。因此我們在開發一項新功能,暫時命名為 "Visual Linting"。點選警告按鈕開啟問題檢視,可以看到這裡提示佈局中的一個按鈕被部分隱藏了。我們可以檢視不同的預覽配置,如果一個檢視顯示在一個螢幕上,則最好也能顯示在另一個螢幕上。我們可以開啟 Layout Validation 檢視,並在這裡檢查各種螢幕尺寸上的佈局;開啟下方的問題檢視,則會顯示幾種佈局之間存在的不一致問題。

△ 檢查不同螢幕尺寸下的佈局

△ 檢查不同螢幕尺寸下的佈局

我們再看一個更為實際的應用。下圖是一個任務追蹤器。開啟問題皮膚,可以看到其中列出了發現的一些問題。我們再次開啟 Layout Validation 檢視,檢視一下這裡的訊息。可以看到,第一條提示我們剛才看到過的檢視不一致問題,它同時還指出,只需要在較窄的佈局中顯示底部欄;另一個問題是,在非常寬的佈局中,文字行中的字元數超過了 120 個,這會降低應用的易用性。最為關鍵的一點是,我們不必親自審查所有這些配置,Android Studio 會幫助我們在後臺檢查。我們還計劃擴大檢查的範圍,而不僅限於螢幕尺寸問題。例如,可以檢查在特定的語言或地區區域是否存在意外的換行等等。

△ Visual Linting 會檢查檢視中的問題並給我們提示

△ Visual Linting 會檢查檢視中的問題並給我們提示

Jetpack Compose

最後,我們來談談同樣很重要的 Compose。我們在 Arctic Fox 中提供了對 Compose 的全面支援,但在 Bumblebee 中,我們又為其新增了幾個新功能。

互動式預覽 & 動畫檢查

點選預覽介面旁邊的觸控圖示,便會啟動互動模式,啟動過程通常不超過兩秒鐘。現在我們就可以在 Design 介面中執行應用,並進行互動測試了。例如,我可以點選開啟購物車、開啟選單等等。我們可以使用此功能對應用進行一些簡單的測試,而且此功能的啟動和退出都很迅速。

△ 互動式預覽

△ 互動式預覽

與此相關的另一個功能是動畫檢查支援。與互動模式類似,點選預覽介面旁邊的動畫檢查圖示,就可以看到動畫中所有動畫曲線的檢視。您可以拖動檢視不同的動畫,也可以迴圈播放這些動畫。在需要調整某些曲線時,我們可以通過這個方法很方便地檢視動畫是如何組合在一起的。順便一提,在 Canary 版本中,預覽註解旁會有一個配置圖示,您可以通過該圖示開啟配置選取器,從而輕鬆地更改和配置預覽。

△ 動畫檢查

△ 動畫檢查

字面量實時編輯

Compose 一個很重要的特性是能夠在迭代介面、更改程式碼後可以立即看到效果。然而,構建速度可能會對此造成很多負面影響,所以我們正在開發一些功能來幫助解決這個問題。其中一個功能便是字面量實時編輯,包括字串、數字和布林值。

以我們的 Rally 理財應用為例。我可以直接更改應用中提醒對話方塊的文字。在下圖中可以看到,在我進行輸入時,預覽幾乎是實時同步更新的。這對數字同樣有效,例如,如果有必要,我可以將內邊距改成很大的值。

△ 實時更新的文字修改

△ 實時更新的文字修改

注意,此功能不僅適用於預覽,其在實體裝置上也可以正常工作。我可以像剛才一樣更改文字,同理也可以更改數字和布林值。

遠期規劃

剛才我向大家展示了 Arctic Fox 和 Bumblebee 中提供的功能,以及一些 Chipmunk 中處於開發階段的功能。接下來,我將介紹一些我們正在為這之後的版本開發的功能,讓大家先睹為快。

Compose 實時編輯

首先是 Compose 實時編輯。此功能是前文展示的 "字面量實時編輯" 功能的泛化,它支援更多場景下的編輯需求,而不僅僅是修改常量和字串。例如,我們可以在預覽中新增一個核取方塊,幾秒鐘後,就可以看到這個核取方塊出現在介面中。

該功能同樣不僅適用於預覽。我們知道,對於 Compose 開發,在測試應用邏輯時,並排顯示一個嵌入式的模擬器將會非常有幫助。我們正在讓實時編輯功能在模擬器上也能工作。下圖是我們正在執行的 Compose 應用,我們不僅可以像剛才那樣更改字串,還可以註釋掉介面的某些部分、重新排序,也可以更改引數......可以看到,這些操作在編輯後的幾毫秒內就能應用到介面上。

△ 實時更新的模糊狀態

△ 實時更新的模糊狀態

上面的示例順帶試用了 Android 12 中的模糊處理。我們在佈局預覽和設計預覽時均支援模糊效果。

這是一個很激動人心的功能。但我們從 Instant Run 中吸取的教訓是,在釋出一項功能之前必須確保它非常可靠。因此我們要投入更多的時間,確保此功能在納入 Android Studio 時不會出錯。

Light Mode (輕量模式)

下一個功能和前文所展示的功能完全相反,這就是輕量模式。由於實時編輯功能的存在,在您輸入的過程中,Android Studio 會進行大量計算,以儘可能快速地實時顯示更新後的介面;而如果使用了 Visual Linting,Android Studio 會在後臺執行分析,以發現不同螢幕尺寸中的潛在問題,等等。通過輕量模式,您可以告訴 IDE,您希望它在您的使用期間減少資源的消耗。

輕量模式是建立在 IntelliJ 節能模式之上的。在進入輕量模式後,前文展示的 Compose 實時編輯功能將不會再工作;而在開啟佈局 XML 檔案時,也不會像通常那樣預設顯示拆分檢視,而只是顯示原始檔。

而在輕量模式下編輯 Kotlin 檔案時,將不會像通常那樣執行各種常見且開銷較大的編輯器驗證,但您仍然可以使用 "轉到宣告" 以及類似的基本編輯功能。如果我輸入毫無意義的內容,通常情況下會產生紅色的警告,但它現在不會這麼做。而如果我儲存該檔案,會暫時解除輕量模式的限制,這樣您就可以獲得所需的基本驗證。

我們正在優化 Android Studio 中的各項功能,以便在您處於輕量模式時適當地幫您減少工作量。例如,佈局編輯器將執行開銷較小的影像縮放和抗鋸齒等任務。我們還在嘗試禁用某些編輯器功能,就像在節能模式下一樣。這些特性同樣是處於早期探索階段,但很有前景,希望我們會取得一些成果。

總結

以上便是本文所介紹的全部內容,其中涵蓋了 Android Studio BumbleBee 版本所聚焦的三個方向的改進,包括 Jetpack Compose、開發效率優化以及 Android 12L 大螢幕裝置的適配。

我們還為您介紹了 Chipmunk 版本中即將釋出的最新功能。除了前文介紹的內容外,該版本還加入了 IntelliJ IDEA 2021.2 中所包含的新功能、為 Android 12L 所提供的可調整大小的模擬器等許多功能。受篇幅所限,不能一一為您介紹。如果您對這些新功能感興趣,可以下載試用 Chipmunk,並告訴我們您的感想。

期待您使用 Android Studio,並創造出體驗出色的應用!

歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!