編譯 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 時出現錯誤訊息如下:

Imgur

錯誤訊息中提示解決方法是指定 minSdkVersion 版本。解法是編輯 android/app/build.gradle,修改 androiddefaultConfig 區塊:

android {
    defaultConfig {
        // minSdkVersion flutter.minSdkVersion
        minSdkVersion 21
    }
}

照步驟改完重新編譯即可。

OpenJDK Version

第一個錯誤訊息沒有保存到,依稀記得是類似語法錯誤。猜測可能是 jdk 版本太老舊。但是更新了系統的 jdk 依然沒效,仔細看編譯的過程才發現 flutter 是使用 android studio 自帶的 jdk,而非 system path 裡的。

我的解決方法:

  1. 打開 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,並替換掉內建的版本。

  1. 安裝完 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

編譯過程中出現的錯誤訊息:

Imgur

看錯誤訊息,應該還是版本問題。編譯失敗的 plugin 是 image_picker。但是我的 project 裡並沒有直接使用 image_picker,而是其他 package 相依性自帶的;更新版本只能透過執行 flutter pub upgrade 但是依然無法解決。

仔細看 log 裏面提示解決問題的建議步驟:

  1. 查看官方 issue list
  2. 如果線上沒有,建議提交一個 issue

按照提示,我找到了: GitHub Actions: ‘:app:lintVitalRelease’. > ‘:image_picker_android:debugUnitTestRuntimeClasspath’.

在回覆留言中找到了正確的解決方法:

Imgur

照步驟改完重新編譯即可。

Plugin Version

編譯 flutter_openim_sdk 時出現的錯誤:

Imgur

中間 trace 了很久,最後發現是 repo 上找不到相應的資源。pubspec.yml 裡 flutter_openim_sdk 是 2.0.9;而 repo 的資源只有 2.0.9.10。原來是版本已經更新,舊版的資源直接被刪了。

Imgur

解法也就只能更新 plugin 了。

Install apk

順便紀錄一下如何用 adb 經由無線網路安裝 apk 的方式: