戰(zhàn)與避坑指南)
簡介Android Studio Chipmunk Canary 2android-studio-2021.2.1.2是2021年10月發(fā)布的Windows版預(yù)覽IDE壓縮包適合Android開發(fā)者嘗鮮新版、驗(yàn)證項(xiàng)目兼容性或?qū)W習(xí)構(gòu)建工具鏈變化。包體總計(jì)2000個(gè)文件主要包括637個(gè)jar庫與插件、521個(gè)py構(gòu)建/腳本工具、255個(gè)json配置、200個(gè)ttf與164個(gè)webp界面資源與圖標(biāo)以及大量dll、exe、so等運(yùn)行組件壓縮后約890.89MB解壓即可使用。已有1845人學(xué)習(xí)下載通過離線包可提前體驗(yàn)Chipmunk新命名體系及Canary渠道的更新節(jié)奏同時(shí)保留完整目錄結(jié)構(gòu)與資源分布便于用戶排查安裝或啟動(dòng)問題。1. 為什么要盯上 Chipmunk Canary 2 而不是等穩(wěn)定版Chipmunk Canary 2 這個(gè)版本號在 Android Studio 下載頁里排在一長串構(gòu)建列表的末尾不顯眼但它恰好卡在 Android 開發(fā)者最容易糾結(jié)的岔路口新工具鏈已經(jīng)放出來舊 IDE 又跑不動(dòng)到底要不要提前換主開發(fā)環(huán)境。android-studio-2021.2.1.2 是 Chipmunk 周期里的第二個(gè) Canary 構(gòu)建這個(gè)通道存在的意義就是讓你在新特性還沒經(jīng)過完整打磨之前先試起來跑通自己的工程、摸清遷移成本。它解決的問題很具體舊版本對 Compose 工具鏈支持不完整、新布局檢查器用不上、AGP 版本被鎖死在舊線路上這些都得靠 Canary 提前驗(yàn)證。適合兩類人一類是項(xiàng)目被穩(wěn)定版的某個(gè)缺陷卡住等不到三個(gè)月后的 patch另一類是手里維護(hù)多個(gè)工程需要提前確認(rèn)升級路線。只想安穩(wěn)寫業(yè)務(wù)代碼的話直接跳過這個(gè)版本不值得折騰。2. 搞清楚 Canary 通道的運(yùn)作機(jī)制直接決定你敢不敢長期用 2021.2.1.2很多人第一次接觸 Canary 時(shí)都會問同一個(gè)問題這詞不是鳥嗎怎么跟編程扯上關(guān)系了Canary 在編程語境里的定位就是試運(yùn)行——拿一個(gè)相對小的構(gòu)建去試探新功能是否可用出了問題不會影響主力環(huán)境。Android Studio 的 Canary 通道比這個(gè)更激進(jìn)它每周甚至幾天就發(fā)一版功能半成品也敢往外放。所以你得先搞明白這套通道機(jī)制再?zèng)Q定要不要把 2021.2.1.2 裝進(jìn)主力機(jī)器。2.1 Android Studio 的四個(gè)發(fā)布通道Canary、Beta、RC、Stable 的真正區(qū)別Android Studio 從很早開始就分四個(gè)通道Canary、Beta、Release Candidate 和 Stable。通道不是按功能多少分的而是按這個(gè)構(gòu)建離最終穩(wěn)定版有多遠(yuǎn)分的。Canary 在最前面功能最新、bug 最多連 Google 自己都不建議拿它做日常開發(fā)Beta 是把 Canary 里驗(yàn)證過一輪的功能收攏起來修掉明顯問題后的狀態(tài)RC 基本等于候選穩(wěn)定版Stable 才是你們公司 IT 部門肯幫你裝的版本。這個(gè)機(jī)制帶來的實(shí)際影響是同一個(gè)功能你在 Canary 里能提前三四個(gè)月看到但代價(jià)是它可能今天能用、明天升級后就壞了而且沒人承諾會修。我一般把這個(gè)通道當(dāng)成功能預(yù)覽器和工程兼容性測試機(jī)用不把它當(dāng)主力 IDE。如果你用 2021.2.1.2 只是為了看某個(gè)新功能長什么樣那沒問題如果你想拿它每天寫生產(chǎn)代碼先把這些風(fēng)險(xiǎn)念三遍。這里有一個(gè)容易誤判的點(diǎn)Canary 版本號比 Stable 大不代表它的功能就是 Stable 的超集。Canary 的分支是獨(dú)立的某些功能在 Canary 里出現(xiàn)過后來因?yàn)橘|(zhì)量問題被砍掉穩(wěn)定版里根本不會有。所以你在 2021.2.1.2 里看到的東西不一定都會出現(xiàn)在后續(xù)穩(wěn)定版里這也是很多團(tuán)隊(duì)在 Canary 階段驗(yàn)證完功能后又推翻方案的原因。2.2 版本號解析2021.2.1.2 到底代表什么android-studio-2021.2.1.2 這個(gè)編號不是隨便排的。2021.2 是版本周期的年份和主版本號表示這個(gè)構(gòu)建屬于 2021 年下半年的 2.x 開發(fā)周期后面的 1.2 是構(gòu)建序號1 表示這是主版本線的第一個(gè)分支2 表示這個(gè)分支上的第二個(gè)構(gòu)建。對應(yīng)到產(chǎn)品名就是 Chipmunk Canary 2。Chipmunk、Dolphin、Electric Eel 這些動(dòng)物代號是按字母序排的每代一個(gè)動(dòng)物名用來標(biāo)記一個(gè)完整的開發(fā)周期。Chipmunk 之后是 Dolphin再往后是 Electric Eel它們的正式版版本號分別對應(yīng)不同的年份周期。這個(gè)對應(yīng)關(guān)系值得記一下因?yàn)榫W(wǎng)上搜問題、查兼容表時(shí)經(jīng)常同時(shí)出現(xiàn)動(dòng)物代號和數(shù)字版本號兩種叫法。這個(gè)版本號還有一個(gè)隱藏信息它是 2 號 Canary說明開發(fā)剛起步連 Beta 都還沒進(jìn)。這個(gè)時(shí)候的構(gòu)建往往處于核心功能剛合并、周邊功能還沒補(bǔ)齊的狀態(tài)。如果你要拿它來測試一個(gè)新功能最好先看這個(gè)功能在這個(gè)版本里是不是已經(jīng)可用別拿文檔里寫的完整功能列表來對照文檔通常是按最終目標(biāo)寫的Canary 階段的實(shí)現(xiàn)可能只覆蓋其中一部分。2.3 版本遷動(dòng)的連鎖反應(yīng)AGP、Gradle、JDK 三件套必須一起看換 Android Studio 版本從來不只是換個(gè)安裝包的事。Android Studio 和一個(gè) Android 項(xiàng)目之間的真正耦合點(diǎn)是 Android Gradle PluginAGP和 Gradle 這兩個(gè)組件IDE 只是外殼。Chipmunk 周期對應(yīng)的 AGP 主版本線是 7.2.x對應(yīng)的 Gradle 版本大約在 7.3.x 這條線JDK 則要求 11 起步。這套對應(yīng)關(guān)系在官方兼容表里有明確列示我沒法在這里給你一個(gè)放之四海皆準(zhǔn)的固定組合因?yàn)?AGP 和 Gradle 之間還有小版本兼容問題。但有一點(diǎn)是確定的當(dāng)你把 IDE 升級到 2021.2.1.2打開舊項(xiàng)目時(shí)IDE 會拿項(xiàng)目里的 AGP 版本和自己內(nèi)置的 AGP 兼容表做比對。如果項(xiàng)目里的 AGP 版本過低它會提示你升級如果你完全不升級IDE 可能還是能跑但部分新功能比如 Compose 預(yù)覽、新布局檢查器的某些模式會因?yàn)?AGP 版本不夠而靜默失效。反過來如果你用舊版 IDE 打開一個(gè)用了新 AGP 的項(xiàng)目IDE 會直接拒絕加載。所以我的建議是把三件事當(dāng)一個(gè)整體來規(guī)劃先查你要用的功能依賴哪個(gè) AGP 版本再反推對應(yīng)的 Gradle 版本和 JDK 版本最后決定要不要升級 IDE。不要只盯著 IDE 本身。這里有一個(gè)參數(shù)要特別注意Gradle JVM 的設(shè)置。Android Studio 自己可以跑在 JDK 17 上但項(xiàng)目構(gòu)建的 Gradle JVM 不一定要跟著升保持 JDK 11 反而更穩(wěn)。在 2021.2.1.2 里這個(gè)設(shè)置在 Settings Build Tools Gradle 下的 Gradle JVM 下拉框里很多人在這里直接選 IDE 默認(rèn) JDK導(dǎo)致老項(xiàng)目構(gòu)建失敗這就是沒把三件套拆開看的典型翻車現(xiàn)場。組件影響范圍升級風(fēng)險(xiǎn)Android Studio編輯、調(diào)試、模擬器、檢查器界面變動(dòng)、插件不兼容AGP構(gòu)建腳本、資源處理、依賴處理配置項(xiàng)廢棄、行為變化Gradle任務(wù)執(zhí)行、依賴解析、構(gòu)建緩存API 不兼容、插件報(bào)錯(cuò)JDKGradle 運(yùn)行環(huán)境版本不匹配直接構(gòu)建失敗這張表建議收藏以后每次升級都按這個(gè)順序排查。先把 JDK 和 Gradle 確定下來再動(dòng) AGP最后才輪到 IDE 本身。3. 下載、安裝到跑通舊項(xiàng)目2021.2.1.2 的最小落地路徑這一章的目標(biāo)很直接把 2021.2.1.2 下載下來安裝到一臺干凈的機(jī)器上并且能打開一個(gè)真實(shí)項(xiàng)目完成構(gòu)建。不追求新功能只求環(huán)境通。3.1 下載安裝包與簽名校驗(yàn)找對渠道比下對版本更重要Android Studio 的所有歷史構(gòu)建都?xì)w檔在官方頁面的 archive 分區(qū)里Chipmunk Canary 2 這種預(yù)覽版也一樣。下載時(shí)注意區(qū)分 Windows、macOS、Linux 三個(gè)平臺Windows 下有兩個(gè)版本一個(gè)是 exe 安裝包一個(gè)是免安裝的 zip 壓縮包。我的建議是下載 zip 包原因很實(shí)際exe 安裝包會寫入注冊表、創(chuàng)建開始菜單項(xiàng)、占一個(gè)卸載程序位置而 zip 解壓就能用刪掉文件夾就等于卸載想同時(shí)保留多個(gè)版本時(shí)互不干擾。下載完成后先做校驗(yàn)別直接解壓。官方頁面會給每個(gè)文件提供 SHA-256 校驗(yàn)值在終端里跑一下確認(rèn)下載過程沒損壞文件# Windows PowerShell Get-FileHash .\android-studio-2021.2.1.2-windows.zip -Algorithm SHA256 # macOS / Linux shasum -a 256 android-studio-2021.2.1.2-mac.zip校驗(yàn)輸出的哈希值如果和官網(wǎng)不一致說明文件下載不完整或被篡改別裝重新下載。這一步看起來多余但在國內(nèi)網(wǎng)絡(luò)環(huán)境下尤其重要下載中斷、代理緩存污染都會導(dǎo)致安裝包損壞而損壞的安裝包在安裝時(shí)不一定報(bào)錯(cuò)往往是裝到一半或首次啟動(dòng)時(shí)才露出馬腳。先校驗(yàn)等于給后續(xù)所有步驟買了份保險(xiǎn)。下載渠道這里有一個(gè)重要提醒別用非官方的鏡像站。Android Studio 這種開發(fā)工具第三方鏡像可能改過打包內(nèi)容也可能版本號是假的。官方下載速度慢可以理解但慢一點(diǎn)和裝一個(gè)不知道是誰打包的文件之間我永遠(yuǎn)選前者。外網(wǎng)下載慢的話用下載工具斷點(diǎn)續(xù)傳比找鏡像靠譜。解壓路徑同樣有講究。Windows 下解壓到 C 盤根目錄或 D 盤根目錄都行但路徑里不要帶中文、不要帶空格、不要帶特殊符號。很多項(xiàng)目的構(gòu)建腳本、Gradle 緩存路徑會自動(dòng)帶上 IDE 安裝路徑一旦路徑里有空格某些第三方插件的路徑解析就會出問題。看起來是玄學(xué)實(shí)際上就是路徑解析沒加引號導(dǎo)致的。3.2 首次啟動(dòng)的關(guān)鍵配置SDK 目錄、語言包順序和第一坑解壓完成后的首次啟動(dòng)會遇到全程最容易翻車的一步SDK 組件下載。啟動(dòng)后 IDE 會彈出 SDK 組件安裝向?qū)绻惚緳C(jī)已經(jīng)有 Android SDK可以在向?qū)Ю镏苯又付ㄒ延械?SDK 路徑省得重新下載一份。如果你沒有就讓 IDE 自己裝裝到默認(rèn)的%USERPROFILE%\AppData\Local\Android\Sdk或~/Android/Sdk。這里有一個(gè)常見的誤解想先給界面設(shè)置成中文再操作向?qū)?。Android Studio 的語言包和 IDE 版本強(qiáng)綁定你得先讓 IDE 以英文界面完成第一次啟動(dòng)、把向?qū)Я鞒套咄暝侔惭b中文語言包然后重啟。順序反了會出現(xiàn)界面一半中文一半英文、甚至語言包覆蓋掉向?qū)ё煮w配置導(dǎo)致按鈕錯(cuò)位的情況。語言包本身是一個(gè)獨(dú)立的插件安裝入口在 Settings Plugins搜索 Chinese 就能找到裝完重啟才生效。新版本 IDE 也可以直接在 Settings Appearance System Settings Language 里改語言但這個(gè)設(shè)置項(xiàng)只在部分版本里存在找不到就老老實(shí)實(shí)用插件。首次啟動(dòng)時(shí)還有一個(gè)大概率報(bào)錯(cuò)的問題IDE 檢查 SDK 組件列表的網(wǎng)絡(luò)請求被卡住彈窗提示 Unable to access Android SDK add-on list。這個(gè)報(bào)錯(cuò)不一定代表 SDK 有問題多數(shù)時(shí)候是 IDE 連接 Google 服務(wù)器超時(shí)超時(shí)后 IDE 主動(dòng)中斷了向?qū)Я鞒?。處理辦法是選 Cancel 跳過網(wǎng)絡(luò)檢查手動(dòng)指定一個(gè) SDK 路徑繼續(xù)走。后續(xù)需要用到的 SDK 平臺和 Build-Tools可以通過sdkmanager命令行工具單獨(dú)安裝不一定非要在 IDE 向?qū)Ю镆淮窝b完。3.3 導(dǎo)入舊項(xiàng)目三個(gè)關(guān)鍵配置點(diǎn)一次到位環(huán)境通了之后接下來導(dǎo)入一個(gè)舊項(xiàng)目驗(yàn)證 2021.2.1.2 能不能正常構(gòu)建。導(dǎo)入時(shí)最容易遇到三個(gè)配置點(diǎn)SDK 路徑、Gradle 版本、JDK 版本。逐個(gè)看。先確認(rèn) SDK 路徑是否被 IDE 正確識別。在 Settings Appearance Behavior System Settings Android SDK 里看 SDK Location 是否指向正確目錄目錄下至少要有 platforms 和 build-tools 兩個(gè)子目錄。缺失的話用命令行補(bǔ)裝# 在 SDK 根目錄下執(zhí)行安裝 Android 12 平臺和對應(yīng)構(gòu)建工具 ./cmdline-tools/latest/bin/sdkmanager platforms;android-31 build-tools;31.0.0這個(gè)命令會先安裝缺失的平臺和構(gòu)建工具。指定android-31是因?yàn)?2021.2.1.2 這個(gè)周期對應(yīng)的目標(biāo)平臺版本是 Android 12如果你的項(xiàng)目 compileSdk 用的不是這個(gè)版本按項(xiàng)目實(shí)際需要改參數(shù)。接著看 Gradle 版本。項(xiàng)目根目錄下有個(gè)gradle/wrapper/gradle-wrapper.properties文件里面寫著項(xiàng)目鎖定的 Gradle 版本。確認(rèn)它和 AGP 的兼容關(guān)系# gradle-wrapper.properties distributionUrlhttps\://services.gradle.org/distributions/gradle-7.4-bin.zip這個(gè)distributionUrl是項(xiàng)目構(gòu)建時(shí)下載的 Gradle 版本不是 IDE 自帶的版本。如果版本號和你裝好的 AGP 不匹配構(gòu)建會在解析依賴階段報(bào)錯(cuò)。不要試圖在這個(gè)文件里隨便改版本號改錯(cuò)了 Gradle 本身也起不來。穩(wěn)妥的做法是先查官方兼容表確認(rèn) AGP 和 Gradle 的對應(yīng)關(guān)系再改這個(gè)文件。最后是 JDK 設(shè)置。在 Settings Build Tools Gradle Gradle JVM 里給項(xiàng)目指定一個(gè) JDK 11 或以上版本。這里注意IDE 自己可以跑在更高版本的 JDK 上但 Gradle 守護(hù)進(jìn)程用的 JVM 和 IDE 是分開的。如果你本機(jī)只裝了 JDK 17老項(xiàng)目又依賴 JDK 8 編譯那得先在系統(tǒng)里裝一個(gè) JDK 11再到這個(gè)設(shè)置項(xiàng)里手動(dòng)指定路徑別讓 Gradle 和 IDE 共用同一個(gè) JVM。三處都配好后點(diǎn)擊 Sync Project 等待首次構(gòu)建完成。第一次構(gòu)建會下載 Gradle 發(fā)行包和所有依賴耗時(shí)取決于網(wǎng)絡(luò)通常在十幾分鐘到半小時(shí)左右。期間如果 IDE 卡在 Indexing 階段不動(dòng)不要頻繁點(diǎn)取消給足時(shí)間。索引完成后能看到 Build 輸出窗口輸出 BUILD SUCCESSFUL這一步過了環(huán)境就算真正通了。4. 安裝和使用 2021.2.1.2 必須知道的 5 個(gè)坑這一章全是實(shí)際踩出來的經(jīng)驗(yàn)每一條都按現(xiàn)象、原因、解決三步寫清楚。建議把這些坑的解決辦法復(fù)制到項(xiàng)目團(tuán)隊(duì)的 Wiki 里因?yàn)閾Q了新 IDE 之后團(tuán)隊(duì)里第一批升級的人一定會挨個(gè)遇到。4.1 首次啟動(dòng)報(bào)錯(cuò)Unable to access Android SDK add-on list現(xiàn)象IDE 首次啟動(dòng)彈窗提示無法訪問 Android SDK 附加組件列表向?qū)o法繼續(xù)。原因IDE 啟動(dòng)后需要從 Google 服務(wù)器拉取一份可用 SDK 組件清單這個(gè)請求在國內(nèi)網(wǎng)絡(luò)環(huán)境下經(jīng)常超時(shí)。超時(shí)后 IDE 不會重試直接報(bào)錯(cuò)彈出導(dǎo)致第一次啟動(dòng)流程中斷。這個(gè)報(bào)錯(cuò)不代表 SDK 本身有問題只是清單沒拉下來。解決彈窗上選 Cancel 跳過向?qū)M(jìn)入手動(dòng)配置模式指定本機(jī)已有的 SDK 路徑或讓 IDE 創(chuàng)建一個(gè)新的空目錄。之后需要什么組件用sdkmanager單獨(dú)裝。如果你想讓 IDE 正常走完向?qū)Э梢越o IDE 配一個(gè)可用的網(wǎng)絡(luò)代理但這不是必需的跳過不影響 SDK 使用。我實(shí)際用下來跳過之后再也沒彈過這個(gè)窗SDK 該裝什么裝什么。4.2 第三方模擬器檢測不到雷電、MuMu 連不上現(xiàn)象本機(jī)裝了雷電模擬器或 MuMu 模擬器但 Android Studio 的設(shè)備列表里看不到它們或者在設(shè)備列表里能看到卻顯示 offline。原因第三方模擬器的 ADB 版本和 Android Studio 內(nèi)置的 ADB 版本不一致兩者端口通信失敗。Android Studio 用的是自己 SDK 目錄下的 adb模擬器用的是自帶或系統(tǒng)里的 adb版本差太多就認(rèn)不出來。解決先手動(dòng)連接再統(tǒng)一 ADB 版本。在模擬器里開啟 ADB 調(diào)試端口后在終端執(zhí)行# 連接雷電模擬器默認(rèn)端口 adb connect 127.0.0.1:5555 # 連接 MuMu 模擬器默認(rèn)端口 adb connect 127.0.0.1:7555連接成功后如果還是顯示 offline把模擬器自帶的 adb 復(fù)制到 Android Studio 的 SDK 目錄下替換掉 platform-tools 里的 adb然后重啟 ADB 服務(wù)adb kill-server adb start-server替換 adb 文件之前記得備份原文件因?yàn)樾掳?adb 不兼容某些老模擬器協(xié)議時(shí)你還得換回去。這個(gè)方法治標(biāo)但足以撐過項(xiàng)目開發(fā)階段。注意真機(jī)調(diào)試不受影響真機(jī)走的是 USB 和無線調(diào)試通道不存在版本沖突所以如果你主力是真機(jī)這個(gè)坑可以不踩。4.3 構(gòu)建報(bào)錯(cuò)AGP 版本過低或過高和 IDE 不兼容現(xiàn)象導(dǎo)入項(xiàng)目后Gradle Sync 直接失敗錯(cuò)誤信息里提到 AGP 版本和 IDE 版本不匹配例如 This version of the Android Gradle plugin requires ...。原因Android Studio 從某個(gè)版本開始對 AGP 版本做了下限校驗(yàn)。2021.2.1.2 要求的 AGP 版本不能低于 7.0而很多老項(xiàng)目的 AGP 還停留在 4.x。上限校驗(yàn)相對寬松但某些特定組合比如 AGP 7.2 配 Gradle 7.0會在構(gòu)建時(shí)給出警告或直接失敗因?yàn)?AGP 對 Gradle 的最低版本有硬性要求。解決改項(xiàng)目里的 AGP 版本號位置在項(xiàng)目根目錄的build.gradle文件或settings.gradle里// 項(xiàng)目級 build.gradle buildscript { dependencies { classpath com.android.tools.build:gradle:7.2.0 } }把版本號改成和 IDE 匹配的版本后再看gradle-wrapper.properties里的 Gradle 版本是否滿足 AGP 的要求。AGP 7.2 需要 Gradle 7.3.3 以上所以 distributionUrl 里的版本也要跟著改。改完這兩個(gè)文件重新 Sync。如果項(xiàng)目中還有其他插件比如 Kotlin 插件、Hilt 插件依賴舊版 Gradle API升級后一并更新這一步?jīng)]有捷徑只能逐個(gè)看報(bào)錯(cuò)。4.4 打開項(xiàng)目后 Indexing 轉(zhuǎn)圈半小時(shí)以上現(xiàn)象項(xiàng)目導(dǎo)入后底部狀態(tài)欄一直顯示 Indexing...項(xiàng)目文件列表點(diǎn)不開代碼跳轉(zhuǎn)失效整個(gè) IDE 像死機(jī)一樣。原因新版 IDE 的索引機(jī)制改動(dòng)了首次打開項(xiàng)目時(shí)要重新掃描所有文件、建立代碼符號索引。項(xiàng)目越大、依賴越多索引越慢。Canary 版本的索引器性能本身就不如穩(wěn)定版這屬于版本早期階段的已知問題。另外如果你把項(xiàng)目放在機(jī)械硬盤或網(wǎng)絡(luò)盤上索引時(shí)間會成倍放大。解決給大項(xiàng)目排除掉不需要索引的目錄。右鍵項(xiàng)目目錄 Mark Directory as Excluded把build、.gradle、node_modules這類編譯產(chǎn)物目錄全部排除索引范圍會小很多。還有一個(gè)實(shí)用技巧如果你的項(xiàng)目用了多個(gè) module可以把不常用的 module 配置成不參與索引在 Settings Build Tools Gradle 里關(guān)掉 Configure on demand 反而能減少同步時(shí)的索引壓力。最后如果索引真的卡死了關(guān)掉 IDE 刪掉項(xiàng)目的.idea目錄和.gradle緩存目錄重新打開一般能恢復(fù)但項(xiàng)目配置也會回到默認(rèn)狀態(tài)需要重新設(shè)置 SDK 路徑。4.5 漢化插件安裝后界面顯示異常按鈕缺失、菜單錯(cuò)位現(xiàn)象安裝中文語言包后IDE 重啟界面出現(xiàn)大面積英文/中文混合顯示部分按鈕點(diǎn)擊沒反應(yīng)設(shè)置界面排版錯(cuò)亂。原因語言包插件和 IDE 版本不是一一對應(yīng)。Canary 版本的 UI 資源文件變化頻繁發(fā)布穩(wěn)定版語言包的作者來不及同步更新導(dǎo)致資源缺失或 key 不匹配。這是版本周期早期特有的問題等 IDE 進(jìn)入 Beta 階段后語言包更新頻率才會跟上。解決在 Settings Plugins 里禁用電語言包插件重啟 IDE 恢復(fù)英文界面等功能驗(yàn)證完再?zèng)Q定要不要裝。這里有一個(gè)順序提醒先裝 IDE、跑通項(xiàng)目、驗(yàn)證完功能最后裝語言包能最大程度降低排查干擾。如果你對英文界面沒有任何不適直接跳過語言包Canary 階段用它純屬給自己加戲。5. 在 2021.2.1.2 里驗(yàn)證新工具鏈從 Compose 預(yù)覽到布局檢查器環(huán)境通了、坑也避了接下來要驗(yàn)證這個(gè) Canary 版本到底值不值得繼續(xù)用下去。驗(yàn)證的核心不是看新功能列表而是看你日常開發(fā)里真正高頻依賴的那幾條工具鏈有沒有變好。這一章按 Compose 開發(fā)、布局調(diào)試、模擬器使用三條線遞進(jìn)。5.1 用最小 Compose 工程驗(yàn)證編輯器側(cè)新特性Chipmunk 周期是 Jetpack Compose 從 1.0 邁向 1.2 的關(guān)鍵階段IDE 對 Compose 的支持在這個(gè)周期里有較大幅度的更新。驗(yàn)證方式很簡單新建一個(gè) Empty Compose Activity 工程看它能不能跑起來以及編輯時(shí)的預(yù)覽是否流暢。新建工程時(shí)注意兩個(gè)參數(shù)Minimum SDK 選 21 以上Android Gradle Plugin 選 7.2.xKotlin 插件版本選和 Compose 編譯器兼容的版本。在這個(gè)周期里一個(gè)典型的 module 級 build.gradle 配置長這樣// app/build.gradle android { compileSdk 32 buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion 1.2.0 } } dependencies { implementation androidx.compose.ui:ui:1.2.0 implementation androidx.compose.material:material:1.2.0 implementation androidx.compose.ui:ui-tooling-preview:1.2.0 }這里有幾個(gè)版本號值得注意。compileSdk 32對應(yīng) Android 12L是 Chipmunk 周期里 IDE 默認(rèn)支持的編譯版本kotlinCompilerExtensionVersion必須和 Kotlin 版本匹配版本不匹配時(shí) IDE 會明確報(bào)錯(cuò)提示。Compose 的三組依賴版本號通常是同步更新的不要混搭。工程跑起來之后重點(diǎn)看編輯器右側(cè)的 Compose Preview 面板。打開一個(gè) Composable 函數(shù)如果 Preview 面板能即時(shí)渲染出 UI并且在代碼修改后兩秒內(nèi)自動(dòng)刷新說明這個(gè)版本的工具鏈?zhǔn)峭暾摹H绻A(yù)覽一直轉(zhuǎn)圈不出圖檢查是不是沒加ui-tooling-preview依賴這是 Preview 功能的底層支撐漏掉它預(yù)覽面板會黑屏。5.2 Layout Inspector 和 Database Inspector 的實(shí)際驗(yàn)證流程這一節(jié)驗(yàn)證 IDE 內(nèi)置調(diào)試工具的改動(dòng)。在 2021.2.1.2 里打開一個(gè)有列表頁的 App啟動(dòng)到模擬器上然后依次打開 Layout Inspector 和 Database Inspector。Layout Inspector 的入口在 Tools Layout InspectorDatabase Inspector 在 View Tool Windows App Inspection。驗(yàn)證 Layout Inspector 時(shí)選一個(gè)正在顯示的頁面重點(diǎn)看三件事一是 3D 視圖是否還能用二是布局層級樹的加載速度有沒有變快三是點(diǎn)擊任意節(jié)點(diǎn)后右側(cè)屬性面板是否完整顯示所有參數(shù)。新版對視圖重疊卡頓這類問題的診斷信息做了增強(qiáng)如果你在屬性面板里看到類似 Too many overlapping views 的提示說明這個(gè)版本的新功能真正生效了。Database Inspector 的驗(yàn)證更簡單一點(diǎn)進(jìn)入一個(gè)有 Room 數(shù)據(jù)庫的頁面操作幾次數(shù)據(jù)增刪然后打開 App Inspection看數(shù)據(jù)庫表數(shù)據(jù)是否實(shí)時(shí)刷新。這個(gè)工具在這個(gè)版本里沒有大的改動(dòng)但入口位置換到了 App Inspection 面板里不少從舊版升級來的人找不到入口白白浪費(fèi)了調(diào)試能力。驗(yàn)證時(shí)有一個(gè)值得注意的點(diǎn)這些工具在模擬器上跑著更流暢真機(jī)上也能用但首次連接慢。如果只驗(yàn)證工具本身用模擬器就夠了。5.3 模擬器與 AVD 管理Canary 里行為有變化的幾個(gè)細(xì)節(jié)模擬器組件在 Chipmunk Canary 2 時(shí)期有一個(gè)明顯變化AVD 管理界面里的設(shè)備定義變多了新增了幾款帶劉海屏和打孔屏的 Pixel 設(shè)備配置。創(chuàng)建 AVD 時(shí)選新設(shè)備定義要留意屏幕尺寸和你的 UI 適配策略是否匹配測試劉海屏適配就不要選標(biāo)準(zhǔn)矩形屏。另一個(gè)細(xì)節(jié)是模擬器冷啟動(dòng)速度。這個(gè)版本的系統(tǒng)鏡像對冷啟動(dòng)做了優(yōu)化但不是所有鏡像都同步更新了。驗(yàn)證方法是創(chuàng)建一個(gè) API 31 的 AVD冷啟動(dòng)計(jì)時(shí)同時(shí)看 IDE 的 Logcat 里有沒有模擬器相關(guān)警告。如果啟動(dòng)超過三分鐘檢查是不是沒開硬件加速或 Windows 下沒啟用 Hyper-V這兩個(gè)是模擬器慢的最常見原因。還有一個(gè)容易忽略的點(diǎn)這個(gè)周期的模擬器系統(tǒng)鏡像里Google Play 版鏡像和 AOSP 版鏡像的差異更明顯了。Google Play 版鏡像自帶 Play 商店但無法 rootAOSP 版可以 root 但很多系統(tǒng)級調(diào)試功能要自己配。如果你做的是需要 root 的調(diào)試選 AOSP 鏡像如果只是跑業(yè)務(wù) App選 Google Play 鏡像更省事。6. 同時(shí)保留舊版 Studio把 Canary 放進(jìn)隔離環(huán)境的關(guān)鍵一步驗(yàn)證完之后大多數(shù)人的選擇不是立刻全面切換而是讓 Canary 和老版本共存等確認(rèn)沒問題再遷。這里最關(guān)鍵的一步是讓兩個(gè)版本的配置目錄分開否則新版本會直接讀取舊版的配置造成插件沖突和窗口布局錯(cuò)亂。Android Studio 的配置目錄默認(rèn)在用戶目錄下Windows 是%APPDATA%\Google\AndroidStudio*macOS 是~/Library/Application Support/Google/AndroidStudio*。不同版本會帶不同的前綴編號理論上能共存但保險(xiǎn)起見給 Canary 單獨(dú)指定一個(gè)配置目錄最穩(wěn)# Windows 下用命令行啟動(dòng)指定自定義配置目錄 %COMSPEC% /C set IDEA_PROPERTIESD:\studio-config\chipmunk\idea.properties D:\android-studio-2021.2.1.2\bin\studio64.exe這個(gè)命令的作用是給 IDE 指定一份獨(dú)立的配置文件里面可以覆蓋idea.config.path和idea.system.path讓 Canary 的配置、緩存、插件全部落到指定目錄和舊版完全隔離。macOS 和 Linux 下同樣用IDEA_PROPERTIES環(huán)境變量實(shí)現(xiàn)參數(shù)名一致。同時(shí)還要注意項(xiàng)目級的隔離。同一個(gè)項(xiàng)目不要同時(shí)用兩個(gè)版本的 IDE 打開并做 Gradle Sync因?yàn)閮蓚€(gè)版本生成的.idea目錄內(nèi)容不兼容來回切換會導(dǎo)致配置互相覆蓋。我自己的習(xí)慣是用 Canary 驗(yàn)證功能時(shí)復(fù)制一份項(xiàng)目代碼到臨時(shí)目錄用臨時(shí)副本測測完沒問題再把結(jié)論應(yīng)用到主項(xiàng)目。這樣兩個(gè)版本的 IDE 永遠(yuǎn)不會操作同一個(gè)項(xiàng)目目錄。關(guān)于這把雙版本流程我自己吃過大虧曾用 Canary 打開了主項(xiàng)目它自動(dòng)升級了 AGP 版本然后我又用舊版打開構(gòu)建直接崩了。后來就形成了上面的習(xí)慣。希望這篇筆記能幫你在 2021.2.1.2 上少走幾趟彎路把精力花在真正值得驗(yàn)證的新功能上。本文還有配套的精品資源點(diǎn)擊獲取