# Flutter 發布安卓APP ## 檢查 APP 配置 * /android/app/src/main/AndroidManifest.xml 1. `application`確定應用名稱是否正確 2. `uses-permission`確定是否有允許不必要的權限 * /android/app/build.gradle 1. [`applicationId`](https://developer.android.com/studio/build/application-id.html),通常是使用公司名稱或是你自己的名稱,不可以和其他在APP Store 的APP重複 2. [`versionCode` & `versionName`](https://developer.android.com/studio/publish/versioning.html) 3. [`minSdkVersion` & `targetSdkVersion`](https://developer.android.com/studio/publish/versioning.html),部分套件有限定最低版本需求須注意 * /android/app/src/main/res/AndroidManifest.xml 1. `android:icon`,圖檔連結是否正確 ## APP簽名 注意事項: 此為私密文件; 不要將它暴露在公開的地方。 ### 前置步驟 1. 安裝 [java](http://www.java.com) ``` java -version ```  ### 下指令方式 #### 建立APP簽名(已有簽名請跳過此步驟) 1. 確認已安裝flutter和java(若有安裝Android Studio基本上會自動安裝),並找到`keytool.exe`(金鑰)。可輸入以下指令查找檔案位置: ``` which keytool /usr/bin/keytool ``` 3. 添加環境變數,方便後續下指令(添加完環境變數記得開一個新的命令視窗,才會吃到調整後的值) 4. 命令視窗輸入下列指令 ``` keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key ``` * genkey 生成金鑰 * keystore 生成金鑰庫的存儲路徑和名稱 * keyalg 金鑰算法 * keysize 金鑰長度 * validity 有效期 * alias 別名 4. 填寫金鑰內容  5. 查看證書 ``` keytool -list -v -keystore C:\dev\flutter\key\key_test.jks ```  #### 引用應用程序中的keystore 1. 建立一個名為/android/key.properties的文件,並添加以下內容: ``` storePassword=剛剛輸入的密碼 keyPassword=剛剛輸入的密碼 keyAlias=key storeFile=輸入本地金鑰儲存位置,例如: C:/dev/flutter/key/key_test.jks ``` > storeFil的斜線方向記得要打對,打錯會告訴你找不到路徑 2. 編輯在/android/app/build.gradle中配置簽名,如圖紅匡,輸入完成後需關閉檔案重新開啟才可以讀到最新的設定檔:  * ``` def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) ``` * ``` signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } } ``` 3. 接下來你只要將版本進行release則會自動進行簽名 AAB只是開發者上傳時格式,用戶下載時依舊是APK。兩者詳細差異可以參考[此文章](https://technews.tw/2021/07/12/android-apk-aab/)進行理解。 * AAB: ``` flutter build appbundle ```  * APK: ``` flutter build apk --split-per-abi ```  * `--split-per-abi`每個支持的目標製作單獨的APK,如x86、arm64等。這可以減少輸出的文件大小。 * `--release`未寫的話預設選項,將每個支持的目包成一個APK,但檔案相較單獨輸出來的更大。 ### 使用 Adroid Studio 建立 1. Build > Generate Signed Bundle / APK  若沒有出現可參考以下做法: * 安裝 Android Studio 的 Flutter、Dart Plugin,並重啟 Android Studio。  * 開啟 Flutter 專案,右鍵安卓資料夾使用 Flutter 開啟,開啟後要跑一陣子若有需要更新 Android Studio 或是 gradle 版本都請在此時更新。  2. Android App Bundle  3. 設定 key  4. 選擇類型及輸出位置後點擊完成就可以在對應資料夾下看到了  ## 補充說明 ### 不知道該裝哪一個apk 使用adb 指令獲取當前系統 ``` adb shell getprop ro.product.cpu.abilist ```  * v8a : 64位元、32位元 * v7a : 32位元 ### 懶得找安裝的程式希望透過指令直接開啟 取得Active ``` adb shell 'dumpsys package | grep -i "yen.flutter.talkwithnative"' ``` 開啟APP ``` adb shell am start -n yen.flutter.talkwithnative/com.example.batterylevel.MainActivity ``` 關閉APP ``` adb shell am force-stop yen.flutter.talkwithnative ``` ## 參考資料 https://doc.flutterchina.club/android-release/ https://pcnow.cc/p/yODX0f23a3.html https://technews.tw/2021/07/12/android-apk-aab/ ## 相關報錯 [Flutter - 疑難炸症#輸出Release APK相關](https://hackmd.io/GlAjkj0WSc2jFHFL13nWMw#%E8%BC%B8%E5%87%BARelease-APK%E7%9B%B8%E9%97%9C) ###### tags: `flutter`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up