flutter筆記5:官方資料搬運-安卓客戶端打包
上一篇,使用material原生控制元件完成了人生的一個用flutter開發的APP,這兩天為了理解flutter,翻了很多資料,資訊量太大,燒了不少腦子,今天這篇就簡單點,實戰走一下安卓客戶端的打包流程,看看會遇到什麼問題。想檢視官方資料的請移步Preparing an Android App for Release。
第一步
首先,你需要找到這幾個路徑下的檔案,並配置其中的幾個引數:
配置APP圖示
- 專案目錄/android/app/src/main/res/ 進入這個路徑後,會看到很多個以mipmap-為字首命名的資料夾,資料夾名稱的字尾是對應的APP圖示畫素密度:
mdpi(中)~160dpi hdpi(高)~240dpi xhdpi(超高)~320dpi xxhdpi(超超高)~480dpi xxxhdpi(超超超高)~640dpi
將對應畫素密度的圖片放入對應的資料夾中,圖片記得用png格式,安裝的APP會根據對應的螢幕畫素密度使用適應尺寸的圖示,但要注意,APP圖示檔案最好統一使用同一個名字,方便後面配置。
配置APP名稱、圖示和系統許可權
- 專案目錄/android/app/src/main/AndroidManifest.xml
application
標籤內部:
android:label="myflutter" //此屬性為你的APP安裝到手機上顯示的名稱,支援中文,所以取名的時候請浪一點~ android:icon="@mipmap/ic_test" //此屬性為APP圖示用到的圖片檔名稱 //這裡圖片檔案不需要輸入檔案格式字尾,前面說過的要使用相同檔名,因為這裡並沒有按畫素密度分別配置對應的圖片檔案
uses-permission
標籤,此標籤定義APP的系統許可權,比如開啟麥克風攝像頭啦、獲取聯絡人號碼簿啦、是否允許上網等等等,許可權有很多,具體請參考翻牆官網。在這裡,預設配置了一個android:name="android.permission.INTERNET"
的許可權,意思是允許手機聯網,因為flutter和APP交換資料需要用到這個許可權。
第二步
APP註冊
生成keystore
官方寫的很簡單,終端下輸入命令即可獲取:
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
然而實際上的效果是:
找不到keytool
然後官方note了一下,說可能會因為找不到keytool而報錯,叫我們輸入flutter doctor命令,從結果的Java binary at:中找到keytool.exe檔案路徑再執行上面的命令,然而我使用了N次flutter doctor也沒找到Java binary at::
找不到Java binary at:
正確的開啟方式是輸入下面這個命令:
flutter doctor -v
然後你看到的結果是:
找到Java binary at:
啊喂~那個官方文件是不是忘了更新啦。
然後我們複製上圖中的路徑,輸入這個命令:
E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
注意,把路徑中最後的java替換成keytool。
這時候會彈出一堆問詢,小夥伴們按要求填寫即可:
生成KEY失敗
但是按要求操作的小夥伴並不能如願以償得到結果,由於當前的目錄下沒有寫的許可權,所以要找一個有寫入許可權的路徑放置生成的KEY,於是上面的命令變成了:
E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore /E:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
注意看~/key.jks
改成了/E:/key.jks
,於是乎:
成功生成KEY
然後到E盤根目錄下可以發現多了一個key.jks檔案,記住:不要把這個jks檔案共享給任何人!!不要把這個jks檔案共享給任何人!!不要把這個jks檔案共享給任何人!!尤其是隻圖方便把原始碼一股腦簽入github的XX,如果是為公司做的APP,後果自己想~。
這時候到專案目錄的android資料夾下建立一個名為key.properties的檔案,並開啟貼入以下程式碼:
storePassword=<password from previous step> //輸入上一步建立KEY時輸入的 金鑰庫 密碼
keyPassword=<password from previous step> //輸入上一步建立KEY時輸入的 金鑰 密碼
keyAlias=key
storeFile=<E:/key.jks> //key.jks的存放路徑
這個key.properties檔案也不要共享出去!!
配置key註冊
進入專案目錄的/android/app/build.gradle檔案,在android {
這一行前面,加入如下程式碼:
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
把如下程式碼:
buildTypes {
release {
signingConfig signingConfigs.debug
}
}
替換成:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
到defaultConfig中,錄入APPID和版本號,版本號命名控制參考翻牆吧你少年:
defaultConfig {
applicationId "com.example.myflutter" //APPID
minSdkVersion 16 //可執行應用的最低版本的 Android 平臺,由該平臺的 API 級別識別符號指定
targetSdkVersion 27 //指定執行應用的目標 API 級別。在某些情況下,這允許應用使用在目標 API 級別中定義的清單元素或行為,而不是僅限於使用那些針對最低 API 級別定義的元素或行為。
versionCode 1 //內部版本號
versionName "1.0" //對外公佈的版本號
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
第三步
編譯生成apk檔案
到終端中輸入如下命令:
flutter build apk
耐心等待執行完畢後你會看到:
生成apk
然後到圖中標識的路徑下,找到生成apk檔案,即打包完成了,你也可以在終端輸入命令安裝APP:
flutter install
安裝時,會把原來除錯執行安裝的APP解除安裝掉,重新安裝新的APP:
安裝APP
然後看手機上:
APP安裝完畢
O了,今天的搬運到此完畢,走過一遍流程下來發現官網文件可能沒及時更新,導致我踩了幾個坑,不過總體來說還比較簡單,大家可以自己搞搞試試,就到這裡,補瞌睡去~flutter 中文社群(官方QQ群:338252156)
作者:燃燒的魚丸 連結:https://www.jianshu.com/p/f91b4e84cec8 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。