1. 程式人生 > >【手把手學習flutter】Flutter打Android包的基本配置和包體積優化策略

【手把手學習flutter】Flutter打Android包的基本配置和包體積優化策略

# 【手把手學習flutter】Flutter打Android包的基本配置和包體積優化策略 > 關注「鬆寶寫程式碼」,回覆“加群” > 加入我們一起學習,天天向上 ## 前言 因為最近參加2020FEHackson,有個專案需要要快速上線,把打包過程和遇到的問題做個記錄。 ## 一、背景 在本地開發中,使用flutter run命令還是Android studio執行或者除錯,flutter構建的是debug版本,也就是本地除錯右上角出現debug標誌。 當本地除錯OK後,準備release版本,比如釋出到應用商城,或者交付使用者使用。 ## 二、前期檢查工作 ### 1、檢查AndroidManifest配置 在/android/app/src/main/中的AndroidManifest.xml檔案,並驗證這些屬性是否正確,特別是: + application屬性,這是應用的名稱。 + uses-permission屬性,啟用flutter工具和app應用進行通訊,預設是開啟,如果不開啟,直接刪除該屬性這一行。 ### 2、檢視構建配置 在/android/app/build.gradle”,驗證這些屬性是否正確, + defaultConfig檔案 + applicationId:制定始終唯一的appid。 + versionCode && versionName:app應用版本號和版本號字串。 + minSdkVersion && targetSdkVersion:指定最低的API級別以及應用程式設計運用的API級別。 ### 3、app簽名 建立keystore,如果之前已經建立過keystore,那就跳過,如果沒有建立過,繼續來看。 建立一個keystore,執行命令: ``` 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中。 下面是詳細的執行過程 ``` 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 輸入 的金鑰口令 (如果和金鑰庫口令相同, 按回車): 再次輸入新口令: [正在儲存/Users/chengxinsong/key.jks] Warning: JKS 金鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /Users/chengxinsong/key.jks -destkeystore /Users/chengxinsong/key.jks -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。 chengxinsongdeMacBook-Pro:~ chengxinsong$ ``` ### 4、應用中引入keystore 在/android下新建key.properties的檔案,其中包含對金鑰庫的引用: ``` storePassword=你輸入的密碼 keyPassword=你輸入的密碼 keyAlias=key storeFile=/Users/你電腦名稱/key.jks ``` ### 5、在構建配置中添加簽名 在/android/app/build.gradle檔案做修改: ``` ... 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 ( 為您的工程目錄). 執行flutter build apk (flutter build 預設會包含 --release選項). ``` 打包好的釋出APK位於/build/app/outputs/apk/app-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 位元組跳動(社招)內推: ![](https://img2020.cnblogs.com/blog/900740/202012/900740-20201205230946130-779509932.jpg) 關注公眾號「鬆寶寫程式碼」,公眾號後臺回覆「加群」 加入我們一起學習。 ![](https://img2020.cnblogs.com/blog/900740/202012/900740-20201205231100393-14589819