1. 程式人生 > >flutter筆記5:官方資料搬運-安卓客戶端打包

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 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。