編譯 Flutter APK
本文主要紀錄使用 flutter 編譯 app apk 時遇到的問題與解法。
版本資訊:
# | Version |
---|---|
Flutter | 3.0.1 |
Host OS | MacOS Big Sur (11.3.1) |
Android Studio | 2020.3 (AI-203.7717.56.2031.7678000) |
Android Platform Tool | r33.0.2 |
OpenJDK | 18.0.1.1 |
Android (phone) | 11 |
問題列表
Android SDK Version
編譯 camera plugin 時出現錯誤訊息如下:
錯誤訊息中提示解決方法是指定 minSdkVersion
版本。解法是編輯 android/app/build.gradle
,修改 android
的 defaultConfig
區塊:
android {
defaultConfig {
// minSdkVersion flutter.minSdkVersion
minSdkVersion 21
}
}
照步驟改完重新編譯即可。
OpenJDK Version
第一個錯誤訊息沒有保存到,依稀記得是類似語法錯誤。猜測可能是 jdk 版本太老舊。但是更新了系統的 jdk 依然沒效,仔細看編譯的過程才發現 flutter 是使用 android studio 自帶的 jdk,而非 system path 裡的。
我的解決方法:
- 打開 Compatibility Matrix 查詢當前 gradle 對應的 jdk 版本:
Java | Gradle |
---|---|
8 | 2.0 |
9 | 4.3 |
10 | 4.7 |
11 | 5.0 |
12 | 5.4 |
13 | 6.0 |
14 | 6.3 |
15 | 6.7 |
16 | 7.0 |
17 | 7.3 |
我的 flutter project 創建時自動指定的 gradle 版本是 6.7,而我的 android studio 內建的 jdk 是 11 版,明顯落後版本的最低需求。因此下一步就是下載並安裝新版 OpenJDK,並替換掉內建的版本。
- 安裝完 OpenJDK 之後,接下來就是更換 jdk。這裡提供我的(有點暴力)作法:
注意: 替換掉 OpenJDK 版本可能會讓 Android Studio 無法使用,因此如果習慣用 Android Studio 開發的朋友請謹慎。另外最好也做一個備份。
cd /Applications/Android Studio.app/Contents/jre
# tar jcf ~/Downloads/AndroidStudioJDK_backup.tar.bz2 Contents/
rm -rf Contents
ln -s /Library/Java/JavaVirtualMachines/jdk-18.0.1.1.jdk/Contents Contents
更新完重新編譯即可。
Gradle (and Kotlin) Version
編譯過程中出現的錯誤訊息:
看錯誤訊息,應該還是版本問題。編譯失敗的 plugin 是 image_picker。但是我的 project 裡並沒有直接使用 image_picker,而是其他 package 相依性自帶的;更新版本只能透過執行 flutter pub upgrade
但是依然無法解決。
仔細看 log 裏面提示解決問題的建議步驟:
- 查看官方 issue list
- 如果線上沒有,建議提交一個 issue
按照提示,我找到了: GitHub Actions: ‘:app:lintVitalRelease’. > ‘:image_picker_android:debugUnitTestRuntimeClasspath’.
在回覆留言中找到了正確的解決方法:
照步驟改完重新編譯即可。
Plugin Version
編譯 flutter_openim_sdk 時出現的錯誤:
中間 trace 了很久,最後發現是 repo 上找不到相應的資源。pubspec.yml 裡 flutter_openim_sdk 是 2.0.9;而 repo 的資源只有 2.0.9.10。原來是版本已經更新,舊版的資源直接被刪了。
解法也就只能更新 plugin 了。
Install apk
順便紀錄一下如何用 adb 經由無線網路安裝 apk 的方式:
-
手機
- 啟用開發者模式
- 啟用 wlan debug
- 打開配對資訊 (我拿到的是中國手機,不知道台版的叫什麼名稱)
上圖中有兩個地址:
192.168.100.141:41679
這是配對用的192.168.100.141:41577
這是adb connect用的
-
adb
adb pair 192.168.100.141:41679 497130 # adb devices -l adb connect 192.168.100.141:41577 adb install build/app/outputs/flutter-apk/app-release.apk