上一篇,使用material原生控件完成了人生的一個用flutter開發(fā)的APP,這兩天為了理解flutter,翻了很多資料,信息量太大,燒了不少腦子,今天這篇就簡單點,實戰(zhàn)走一下安卓客戶端的打包流程,看看會遇到什么問題。想查看官方資料的請移步Preparing an Android App for Release。
第一步
首先,你需要找到這幾個路徑下的文件,并配置其中的幾個參數(shù):
配置APP圖標
- 項目目錄/android/app/src/main/res/
進入這個路徑后,會看到很多個以mipmap-為前綴命名的文件夾,文件夾名稱的后綴是對應(yīng)的APP圖標像素密度:
mdpi(中)~160dpi
hdpi(高)~240dpi
xhdpi(超高)~320dpi
xxhdpi(超超高)~480dpi
xxxhdpi(超超超高)~640dpi
將對應(yīng)像素密度的圖片放入對應(yīng)的文件夾中,圖片記得用png格式,安裝的APP會根據(jù)對應(yīng)的屏幕像素密度使用適應(yīng)尺寸的圖標,但要注意,APP圖標文件最好統(tǒng)一使用同一個名字,方便后面配置。
配置APP名稱、圖標和系統(tǒng)權(quán)限
- 項目目錄/android/app/src/main/AndroidManifest.xml
application標簽內(nèi)部:
android:label="myflutter" //此屬性為你的APP安裝到手機上顯示的名稱,支持中文,所以取名的時候請浪一點~
android:icon="@mipmap/ic_test" //此屬性為APP圖標用到的圖片文件名稱
//這里圖片文件不需要輸入文件格式后綴,前面說過的要使用相同文件名,因為這里并沒有按像素密度分別配置對應(yīng)的圖片文件
uses-permission標簽,此標簽定義APP的系統(tǒng)權(quán)限,比如打開麥克風(fēng)攝像頭啦、獲取聯(lián)系人號碼簿啦、是否允許上網(wǎng)等等等,權(quán)限有很多,具體請參考翻墻官網(wǎng)。在這里,默認配置了一個android:name="android.permission.INTERNET"的權(quán)限,意思是允許手機聯(lián)網(wǎng),因為flutter和APP交換數(shù)據(jù)需要用到這個權(quán)限。
第二步
APP注冊
生成keystore
官方寫的很簡單,終端下輸入命令即可獲?。?/p>
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
然而實際上的效果是:

然后官方note了一下,說可能會因為找不到keytool而報錯,叫我們輸入flutter doctor命令,從結(jié)果的Java binary at:中找到keytool.exe文件路徑再執(zhí)行上面的命令,然而我使用了N次flutter doctor也沒找到Java binary at::

正確的打開方式是輸入下面這個命令:
flutter doctor -v
然后你看到的結(jié)果是:

啊喂~那個官方文檔是不是忘了更新啦。
然后我們復(fù)制上圖中的路徑,輸入這個命令:
E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
注意,把路徑中最后的java替換成keytool。
這時候會彈出一堆問詢,小伙伴們按要求填寫即可:

但是按要求操作的小伙伴并不能如愿以償?shù)玫浇Y(jié)果,由于當(dāng)前的目錄下沒有寫的權(quán)限,所以要找一個有寫入權(quán)限的路徑放置生成的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,于是乎:

然后到E盤根目錄下可以發(fā)現(xiàn)多了一個key.jks文件,記住:不要把這個jks文件共享給任何人?。〔灰堰@個jks文件共享給任何人??!不要把這個jks文件共享給任何人!!尤其是只圖方便把源碼一股腦簽入github的XX,如果是為公司做的APP,后果自己想~。
這時候到項目目錄的android文件夾下創(chuàng)建一個名為key.properties的文件,并打開貼入以下代碼:
storePassword=<password from previous step> //輸入上一步創(chuàng)建KEY時輸入的 密鑰庫 密碼
keyPassword=<password from previous step> //輸入上一步創(chuàng)建KEY時輸入的 密鑰 密碼
keyAlias=key
storeFile=<E:/key.jks> //key.jks的存放路徑
這個key.properties文件也不要共享出去?。?/p>
配置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 //可運行應(yīng)用的最低版本的 Android 平臺,由該平臺的 API 級別標識符指定
targetSdkVersion 27 //指定運行應(yīng)用的目標 API 級別。在某些情況下,這允許應(yīng)用使用在目標 API 級別中定義的清單元素或行為,而不是僅限于使用那些針對最低 API 級別定義的元素或行為。
versionCode 1 //內(nèi)部版本號
versionName "1.0" //對外公布的版本號
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
第三步
編譯生成apk文件
到終端中輸入如下命令:
flutter build apk
耐心等待執(zhí)行完畢后你會看到:

然后到圖中標識的路徑下,找到生成apk文件,即打包完成了,你也可以在終端輸入命令安裝APP:
flutter install
安裝時,會把原來調(diào)試運行安裝的APP卸載掉,重新安裝新的APP:

然后看手機上:

O了,今天的搬運到此完畢,走過一遍流程下來發(fā)現(xiàn)官網(wǎng)文檔可能沒及時更新,導(dǎo)致我踩了幾個坑,不過總體來說還比較簡單,大家可以自己搞搞試試,就到這里,補瞌睡去~
flutter 中文社區(qū)(官方QQ群:338252156)