關注「鬆寶寫代碼」,回覆「加羣」
加入咱們一塊兒學習,每天向上html
由於最近參加2020FEHackson,有個項目須要要快速上線,把打包過程和遇到的問題作個記錄。android
在本地開發中,使用flutter run命令仍是Android studio運行或者調試,flutter構建的是debug版本,也就是本地調試右上角出現debug標誌。git
當本地調試OK後,準備release版本,好比發佈到應用商城,或者交付用戶使用。github
在
在
建立keystore,若是以前已經建立過keystore,那就跳過,若是沒有建立過,繼續來看。工具
建立一個keystore,執行命令:post
For more details, please visit https://support.apple.com/kb/HT208050. chengxinsongdeMacBook-Pro:~ chengxinsong$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
生成的文件是 key.jks
默認文件地址:/Users/你電腦名稱/key.jks學習
注意:密鑰是私密文件,不要加到git中。gradle
下面是詳細的執行過程
Last login: Mon Nov 2 14:17:41 on ttys005 The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/zsh`. For more details, please visit https://support.apple.com/kb/HT208050. chengxinsongdeMacBook-Pro:~ chengxinsong$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 輸入密鑰庫口令: 再次輸入新口令: 它們不匹配。請重試 輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什麼? [Unknown]: cheng 您的組織單位名稱是什麼? [Unknown]: byte 您的組織名稱是什麼? [Unknown]: byte 您所在的城市或區域名稱是什麼? [Unknown]: nj 您所在的省/市/自治區名稱是什麼? [Unknown]: nj 該單位的雙字母國家/地區代碼是什麼? [Unknown]: cn CN=cheng, OU=byte, O=byte, L=nj, ST=nj, C=cn是否正確? [否]: y 正在爲如下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期爲 10,000 天): CN=cheng, OU=byte, O=byte, L=nj, ST=nj, C=cn 輸入 <key> 的密鑰口令 (若是和密鑰庫口令相同, 按回車): 再次輸入新口令: [正在存儲/Users/chengxinsong/key.jks] Warning: JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /Users/chengxinsong/key.jks -destkeystore /Users/chengxinsong/key.jks -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。 chengxinsongdeMacBook-Pro:~ chengxinsong$
在
storePassword=你輸入的密碼 keyPassword=你輸入的密碼 keyAlias=key storeFile=/Users/你電腦名稱/key.jks
在
... apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" // 新增的內容 def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { compileSdkVersion 28 ... ... defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.flutter_tester" minSdkVersion 18 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } // 新增內容 這塊就是從 signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } // 新增內容 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.release } }
如今應用打包的release版本將自動進行簽名。
而後打包命令,構建發佈版(release)APK。若是您完成了前一節中的簽名步驟,則會對APK進行簽名。
使用命令行:
cd <app dir> (<app dir> 爲您的工程目錄). 運行flutter build apk (flutter build 默認會包含 --release選項).
打包好的發佈APK位於
發現flutter打包以後體積是有點大,咱們來分析一下這個APK包的構成,咱們主要來看不混淆的狀況下。
所有內容能夠點擊如下連接查看:
http://www.chengxinsong.cn/post/110
https://github.com/saucxs/full_stack_knowledge_list/blob/master/article/flutter/flutter_build_apk.md
字節跳動(社招)內推:
關注公衆號「鬆寶寫代碼」,公衆號後臺回覆「加羣」 加入咱們一塊兒學習。