Android 開發環境設定 for Apple Silicon
在 M 系列晶片上快速設定環境
最近升級了自己自用了 8 年的 MacBook 電腦 (MacBook Pro 2013 late),做滿兩屆之後今年 Apple 終於推出了全新改版的 MacBook Pro 系列電腦。年底開賣後也入手了一台,不過這次的新機器,Apple 已經從過去 Intel CPU 升級到了自家的 Apple Silicon 系列 SoC。
架構的更換,也代表著開發環境用的工具如果沒有支援原生環境勢必會有一些效能的損失。(縱然這些損失對比我的舊電腦,還是快很多!),本文撰寫於 Apple 架構遷移時期的中間 (2022 Q1),不過 Android 的開發工具幾乎都已經支援 Apple Silicon 了!本文整理收到一台 M 系列晶片的新電腦,如何建置環境的紀錄。
安裝支援 Apple Silicon 的 Java 版本
Android 開發需要 Java 的環境來編譯、跑 IDE,可以選擇原生支援 Apple Silicon 的 JDK 來讓電腦發揮完整實力,但如果沒有注意到安裝到給 Intel 使用的版本,會因為 Rosetta 2 的關係造成效能損失。
這邊會推薦使用 sdkman 或是 jenv 來管理電腦裡頭的 Java 版本,有鑒於 jenv 我自己覺得用起來比較麻煩 XD,這裡以 sdkman 作爲範例說明:
安裝
開啟 Terminal 鍵入
$curl -s "https://get.sdkman.io" | bash
接下來要調整,讓 sdkman 只列出支援 Apple Silicon 的 sdk。
請再開啟 terminal 使用文字編輯器開啟 sdkman 的設定:
$vim ~/.sdkman/etc/config
查看裡頭的 sdkman_rosetta2_compatible
請將他調整為 false。(新版有可能預設就是 false)
查詢支援 Apple Silicon 的 JDK
安裝好後就能使用 sdk 指令查詢這個程式提供的 SDK 來源
$sdk list java
就會顯示 sdkman 來源提供的 JDK
你可以從中選擇喜歡的 JDK 進行安裝,這邊別忘了支援 Apple Silicon 的相關工具都需要執行在 Java 11(含以上)。我自己則是選擇 Azure 編譯的 JDK,Zulu 是最早一批支援 M1 晶片的 JDK,使用起來也沒有遇到什麼問題,故就一直用到現在。
如果你也想安裝 Zulu 的 JDK,可以輸入下列的指令即可安裝:
$sdk install java 11.0.13-zulu
java 後面接上的即是剛剛列表之中看到的 Identifier。
支援 Apple Silicon 的 Android Studio
推薦使用 JetBrains Toolbox 來安裝,只要安裝 Apple Silicon 版本的 JetBrains Toolbox,在裡頭安裝的各種 IDE 就是 Apple Silicon 原生版本,不必擔心安裝到 Intel 版。
截至本文撰寫,支援 Apple Silicon 的 Android Studio 穩定版本為 Arctic Fox 2020.3.1,任何比這個還要新的版本應該都有原生支援了,所以不用擔心。
Toolbox 還會在有新版本時自動更新,非常方便好用。
如何調整專案使用的 JDK
可以透過以下的方式來調整編譯用的 JDK。首先,在右側檔案畫面,你的專案上按下右鍵,按下 Open Module Setting。
切換到 SDK Location 分頁,你會發現這邊寫:你在找 JDK Location 的話他已經移動到 Gradle Settings 囉,不過這個 Gradle Settings 是可以按的,請按下他開啟專案 JDK 設定
Gradle 設定視窗開啟後,會看到下面 Gradle JDK 的設定。將下拉選單開啟後選擇你在 Sdkman 安裝的 JDK 版本即可。(本範例安裝的為 Zulu 的 JDK)
Dependency 升級
TL;DR
支援 Apple Silicon 的版本
Kotlin -> 1.5.30+
Gradle -> 7.0+
AGP -> 7.0+
Room -> 2.4.0+
如果你的專案使用 Kotlin,請務必升級你的版本到 1.5.30 以上,才有原生支援 Apple Silicon。
除了 Kotlin 以外,對於管理 Android 專案 Dependency 與 Build Process 很重要的 Gradle,也需要升級為 Gradle 7.0 版以上,才支援蘋果晶片。
因為 Gradle 升級了,相對應的 AGP (Android Build Tool) 也需要升級。也是跟著升級至 7.0 版或更新的版本即可。
另外,專案裡面如果有使用到 Annotation Processor,也需要看看他們支援的狀況,否則會編譯失敗。我手邊遇過的專案是 Room,他必須要升級為 2.4.0 才能讓專案正常的編譯。