同事說現在 Android 陣營不再支援以 Eclipse 開發,一定要在 Android Studio 開發,重建環境時陸續遇到一些問題,記錄下來。
狀況:錯誤訊息 "Lint found fatal errors while assembling a release target"
可以修正 lint 裡的 issue,或是修改 build script,關掉 lint 檢查。在專案裡的 Gradle Scripts 找到 build.gradle,在最後一組大括號前加入以下設定:
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
狀況:要使用 /etc/hosts 進行測試
因為要讓 Android Studio 上的模擬器連接到我們自建的測試網站,最好的方法就是在 /etc/hosts 修改 domain name 對應,像是這樣:
tw.yahoo.com 127.0.0.1
不過如果只有在 macOS 的 /private/etc/hosts 這個檔案修改對應設定,只有 Xcode 模擬器可以吃得到這個設定。但 Android Studio 預設並不會吃作業系統裡 /etc/hosts 的設定值。
必須要先找到 SDK 的路徑,在 "How To Set Android SDK Path In Windows And Mac" 這篇是說用 nano .bash_profile. 去做 PATH 的設定,但是我覺得怪怪的。我還是仿 Windows 的做法,從 Android Studio 的 GUI 介面去找。macOS 的選單路徑與 Windows 稍有差異:
- 打開 Android Studio,點最左上角系統蘋果圖示右邊的 "Android Studio",在選單中找到 Preferences
- 在左邊樹狀選單選擇 Apperance & Behavior > System Settings > Android SDK
- 畫面中的 "Android SDK Location" 就是實際的安裝路徑
像在 "How to edit /etc/hosts file in Android Studio emulator running in nougat?" 一文裡的 Android Studio 模擬器路徑設定在 "android-sdk-macosx/tools/emulator",我的 Android Studio 的 SDK 路徑卻在 "/Applications/sdk/tools/emulator"。
整體而言,我的作法如下,開一個 terminal 視窗(終端機),依序處理以下設定:
- 先修改系統的 /etc/hosts
sudo vi /private/etc/hosts
- 設定 Android SDK 的 emulator & tools 的路徑,否則後續執行模擬器時會出現以下錯誤訊息:
PANIC: Missing emulator engine program for 'x86' CPU.
依 "Android Emulator Error Message: “PANIC: Missing emulator engine program for 'x86' CPUS.”" 文章中的說明,需要設定 Android SDK Path:
export ANDROID_SDK=/Applications/sdk
export PATH=$ANDROID_SDK/emulator:$ANDROID_SDK/tools:$PATH
- 查詢模擬器清單,例如我可以看到我有一台裝置的 avdname 是 "Pixel_XL_API_24"
emulator -list-avds
- 執行模擬器為可讀寫模式
emulator -avd "Pixel_XL_API_24" -writable-system
- 開啟模擬器後,再開一個新的 terminal 視窗,在 PATH 設定 sdk 路徑,讓系統認識 "adb" 這個指令
export PATH=/Applications/sdk/platform-tools/:$PATH
- 參考《如何修改Android的hosts文件》,重啟 adb、調整 hosts 檔案權限
adb root
adb remount
adb shell
進入 adb shell 模式後,修改 hosts 檔案權限
mount -o rw,remount /system
chmod 666 /system/etc/hosts
exit
確定離開 adb shell 模式後(有時候下第一次 exit 會沒有跳出來,要下第二次才會離開),把 macOS 裡的 hosts 檔案餵給 adb 裡的 hosts
adb push /private/etc/hosts /system/etc/hosts
- 進入 adb shell,確認有沒有吃到正確的 hosts 設定
adb shell
cat /etc/hosts
ping tw.yahoo.com
一開始我在修改時會一直跳出各式各樣的錯誤訊息,尤其是 adb remount 必定執行失敗。後來看到有人說模擬器從 API 29 降到 API 24 就可以了,我也如法炮製,看起來果然如此。
有幾次會在設定後發生模擬器在執行 "emulator -avd <avd_name> -writable-system" 後螢幕全黑的窘境,如果發生了就到 Android Studio 的 AVD Manager 把模擬器刪掉重新安裝就好了。(有的人說從 AVD Manager 選 Wipe Data & Cold Boot Now,但我試過對我沒用)
留言列表