flutter筆記5:官方資料搬運(yùn)-安卓客戶端打包

上一篇,使用material原生控件完成了人生的一個(gè)用flutter開(kāi)發(fā)的APP,這兩天為了理解flutter,翻了很多資料,信息量太大,燒了不少腦子,今天這篇就簡(jiǎn)單點(diǎn),實(shí)戰(zhàn)走一下安卓客戶端的打包流程,看看會(huì)遇到什么問(wèn)題。想查看官方資料的請(qǐng)移步Preparing an Android App for Release。

第一步

首先,你需要找到這幾個(gè)路徑下的文件,并配置其中的幾個(gè)參數(shù):

配置APP圖標(biāo)

  • 項(xiàng)目目錄/android/app/src/main/res/
    進(jìn)入這個(gè)路徑后,會(huì)看到很多個(gè)以mipmap-為前綴命名的文件夾,文件夾名稱的后綴是對(duì)應(yīng)的APP圖標(biāo)像素密度:

mdpi(中)~160dpi
hdpi(高)~240dpi
xhdpi(超高)~320dpi
xxhdpi(超超高)~480dpi
xxxhdpi(超超超高)~640dpi

將對(duì)應(yīng)像素密度的圖片放入對(duì)應(yīng)的文件夾中,圖片記得用png格式,安裝的APP會(huì)根據(jù)對(duì)應(yīng)的屏幕像素密度使用適應(yīng)尺寸的圖標(biāo),但要注意,APP圖標(biāo)文件最好統(tǒng)一使用同一個(gè)名字,方便后面配置。

配置APP名稱、圖標(biāo)和系統(tǒng)權(quán)限

  • 項(xiàng)目目錄/android/app/src/main/AndroidManifest.xml

application標(biāo)簽內(nèi)部:

android:label="myflutter"   //此屬性為你的APP安裝到手機(jī)上顯示的名稱,支持中文,所以取名的時(shí)候請(qǐng)浪一點(diǎn)~
android:icon="@mipmap/ic_test"  //此屬性為APP圖標(biāo)用到的圖片文件名稱
//這里圖片文件不需要輸入文件格式后綴,前面說(shuō)過(guò)的要使用相同文件名,因?yàn)檫@里并沒(méi)有按像素密度分別配置對(duì)應(yīng)的圖片文件

uses-permission標(biāo)簽,此標(biāo)簽定義APP的系統(tǒng)權(quán)限,比如打開(kāi)麥克風(fēng)攝像頭啦、獲取聯(lián)系人號(hào)碼簿啦、是否允許上網(wǎng)等等等,權(quán)限有很多,具體請(qǐng)參考翻墻官網(wǎng)。在這里,默認(rèn)配置了一個(gè)android:name="android.permission.INTERNET"的權(quán)限,意思是允許手機(jī)聯(lián)網(wǎng),因?yàn)閒lutter和APP交換數(shù)據(jù)需要用到這個(gè)權(quán)限。

第二步

APP注冊(cè)

生成keystore

官方寫(xiě)的很簡(jiǎn)單,終端下輸入命令即可獲?。?/p>

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

然而實(shí)際上的效果是:


找不到keytool

然后官方note了一下,說(shuō)可能會(huì)因?yàn)檎也坏?strong>keytool而報(bào)錯(cuò),叫我們輸入flutter doctor命令,從結(jié)果的Java binary at:中找到keytool.exe文件路徑再執(zhí)行上面的命令,然而我使用了N次flutter doctor也沒(méi)找到Java binary at:

找不到Java binary at:

正確的打開(kāi)方式是輸入下面這個(gè)命令:

flutter doctor -v

然后你看到的結(jié)果是:


找到Java binary at:

啊喂~那個(gè)官方文檔是不是忘了更新啦。

然后我們復(fù)制上圖中的路徑,輸入這個(gè)命令:

E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

注意,把路徑中最后的java替換成keytool。

這時(shí)候會(huì)彈出一堆問(wèn)詢,小伙伴們按要求填寫(xiě)即可:


生成KEY失敗

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

成功生成KEY

然后到E盤(pán)根目錄下可以發(fā)現(xiàn)多了一個(gè)key.jks文件,記住:不要把這個(gè)jks文件共享給任何人??!不要把這個(gè)jks文件共享給任何人!!不要把這個(gè)jks文件共享給任何人??!尤其是只圖方便把源碼一股腦簽入github的XX,如果是為公司做的APP,后果自己想~。

這時(shí)候到項(xiàng)目目錄的android文件夾下創(chuàng)建一個(gè)名為key.properties的文件,并打開(kāi)貼入以下代碼:

storePassword=<password from previous step>    //輸入上一步創(chuàng)建KEY時(shí)輸入的 密鑰庫(kù) 密碼
keyPassword=<password from previous step>    //輸入上一步創(chuàng)建KEY時(shí)輸入的 密鑰 密碼
keyAlias=key
storeFile=<E:/key.jks>    //key.jks的存放路徑

這個(gè)key.properties文件也不要共享出去??!

配置key注冊(cè)

進(jìn)入項(xiàng)目目錄的/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和版本號(hào),版本號(hào)命名控制參考翻墻吧你少年

defaultConfig {
        applicationId "com.example.myflutter"  //APPID
        minSdkVersion 16  //可運(yùn)行應(yīng)用的最低版本的 Android 平臺(tái),由該平臺(tái)的 API 級(jí)別標(biāo)識(shí)符指定
        targetSdkVersion 27  //指定運(yùn)行應(yīng)用的目標(biāo) API 級(jí)別。在某些情況下,這允許應(yīng)用使用在目標(biāo) API 級(jí)別中定義的清單元素或行為,而不是僅限于使用那些針對(duì)最低 API 級(jí)別定義的元素或行為。
        versionCode 1    //內(nèi)部版本號(hào)
        versionName "1.0"  //對(duì)外公布的版本號(hào)
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

第三步

編譯生成apk文件

到終端中輸入如下命令:

flutter build apk

耐心等待執(zhí)行完畢后你會(huì)看到:


生成apk

然后到圖中標(biāo)識(shí)的路徑下,找到生成apk文件,即打包完成了,你也可以在終端輸入命令安裝APP:

flutter install

安裝時(shí),會(huì)把原來(lái)調(diào)試運(yùn)行安裝的APP卸載掉,重新安裝新的APP:


安裝APP

然后看手機(jī)上:


APP安裝完畢

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評(píng)論 25 709
  • 服務(wù)器https配置 配置https操作說(shuō)明文檔 1、查看服務(wù)器環(huán)境配置(tomcat和apache合并使用) 2...
    南京楊小兵閱讀 9,249評(píng)論 0 9
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • >node的版本要求大于6 >npm install -g cordova ionic ## Build Setu...
    Peter2021閱讀 1,046評(píng)論 0 2
  • 考了兩年,走過(guò)很多彎路,有學(xué)弟學(xué)妹來(lái)問(wèn)經(jīng)驗(yàn),所以就寫(xiě)一份文字版的吧。 【英語(yǔ)】 英語(yǔ)是刷人的科目,很多人專(zhuān)業(yè)課、政...
    溫竹梅閱讀 618評(píng)論 9 13

友情鏈接更多精彩內(nèi)容