在典型的開發週期中,您將使用flutter run
命令列、Android Studio、VS Code中通過工具欄執行和除錯按鈕進行測試。預設情況下,Flutter構建應用程式的debug版本。
當您準備好為Android準備的release版時,例如要釋出到應用商店,請按照此頁面上的步驟操作。
檢查AppManifest
檢視預設應用程式清單檔案(位於<app dir>/android/app/src/main/
中的AndroidManifest.xml
檔案),並驗證這些值是否正確,特別是:
application
: 編輯application
標籤, 這是應用的名稱。uses-permission
: 如果您的應用程式程式碼不需要Internet訪問,請刪除android.permission.INTERNET
許可權。標準模板包含此標記是為了啟用Flutter工具和正在執行的應用程式之間的通訊。
注意:
<app dir>
為你的工程目錄。
檢視構建配置
檢視預設[Gradle 構建檔案][gradlebuild]”build.gradle”,它位於<app dir>/android/app/
,驗證這些值是否正確,尤其是:
defaultConfig
:
新增啟動圖示
當一個新的Flutter應用程式被建立時,它有一個預設的啟動器圖示。要自定義此圖示:
- 檢視Android啟動圖示 設計指南,然後建立圖示。
- 在
<app dir>/android/app/src/main/res/
目錄中,將圖示檔案放入使用配置限定符命名的資料夾中。預設mipmap-
資料夾演示正確的命名約定。 - 在
AndroidManifest.xml
中,將application
標記的android:icon
屬性更新為引用上一步中的圖示(例如<application android:icon="@mipmap/ic_launcher" ...
)。 - 要驗證圖示是否已被替換,請執行您的應用程式並檢查應用圖示
app簽名
建立 keystore
如果您有現有keystore,請跳至下一步。如果沒有,請通過在執行以下命令來建立一個:
Linux/Unix:
$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
複製程式碼
其中
~/key.jks
為生成keystore的儲存路徑
Win:
> C:
> cd C:\\Users\\ZERO //ZERO為當前使用者的使用者名稱
> keytool -genkey -v -keystore C:\\Users\\ZERO\\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
複製程式碼
同樣其中
C:\\Users\\ZERO\\key.jks
為生成keystore的儲存路徑
注意:保持檔案私密; 不要將它加入到公共原始碼控制中。
注意: keytool
可能不在你的系統路徑中。它是Java JDK的一部分,它是作為Android Studio的一部分安裝的。有關具體路徑,請百度。
引用應用程式中的keystore
建立一個名為<app dir>/android/key.properties
的檔案,其中包含對金鑰庫的引用:
storePassword=<password from previous step>
keyPassword=<password from previous step>
keyAlias=key
storeFile=<location of the key store file, e.g. /Users/<user name>/key.jks> # key.jks檔案的儲存路徑
複製程式碼
注意:
- 保持檔案私密;
- 不要將它加入公共原始碼控制中;
storeFile
中的路徑是以<app dir>/android/app/
開始的相對路徑,因此為了防止不必要的錯誤建議使用絕對路徑
在gradle中配置簽名
通過編輯<app dir>/android/app/build.gradle
檔案為您的應用配置簽名
-
替換:
android { 複製程式碼
為:
def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { 複製程式碼
-
替換:
buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } 複製程式碼
為:
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release ndk{ // 必須加入這部分,否則可能導致編譯成功的release包在真機中會閃退 abiFilters "armeabi-v7a" } } debug { ndk { //這裡要加上,否則debug包會出問題,後面三個為可選,x86建議加上不然部分模擬器回報錯 abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86" } } } 複製程式碼
現在,您的應用的release版本將自動進行簽名。
$ flutter build apk Initializing gradle... 3.9s Resolving dependencies... 56.0s Running Gradle task 'assembleRelease'... Running Gradle task 'assembleRelease'... Done 118.7s Built build\app\outputs\apk\release\app-release.apk (7.4MB). 複製程式碼
注意 :
release
包在真機中閃退可能是因為打包時沒有引入arm64
的libflutter
的so檔案
導致在arm64架
構手機上出現“相容”問題。主要是引用so庫的問題arm64cpu架構是可以像下相容的,簡單點就是arm64
架構的cpu可以使用arm32的.so
檔案。出現問題真正原因是我們在引用so庫時(引用的三方庫中引用了so庫)。
開啟混淆
預設情況下 flutter 不會開啟 Android 的混淆。
如果使用了第三方 Java 或 Android 庫,也許你想減小 apk 檔案的大小或者防止程式碼被逆向破解。
配置混淆
建立 /android/app/proguard-rules.pro
檔案,並新增以下規則:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
複製程式碼
上述配置只混淆了 Flutter 引擎庫,任何其他庫(比如 Firebase)需要新增與之對應的規則。
開啟混淆/壓縮
開啟 /android/app/build.gradle
檔案,定位到 buildTypes
塊。
在 release
配置中將 minifyEnabled
和 useProguard
設為 true
,再將混淆檔案指向上一步建立的檔案。
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
複製程式碼
構建一個釋出版(release)APK
本節介紹如何構建釋出版(release)APK。如果您完成了前一節中的簽名步驟,則會對APK進行簽名。
使用命令列:
cd <app dir>
(<app dir>
為您的工程目錄).- 執行
flutter build apk
(flutter build
預設會包含--release
選項).
打包好的釋出APK位於<app dir>/build/app/outputs/apk/app-release.apk
。
在裝置上安裝發行版APK
按照以下步驟在已連線的Android裝置上安裝上一步中構建的APK
使用命令列:
- 用USB您的Android裝置連線到您的電腦
cd <app dir>
.- 執行
flutter install
.