一. Android打包和發(fā)布
1.1. 填寫應用配置
1.1.1. 基本信息
在之前講解應用程序的配置信息時,我們已經(jīng)介紹過,這里不再過多介紹
????應用的AppID
????應用的名稱
????應用的Icon
????應用的Launcher
1.1.2. 版本信息
Flutter的版本信息在哪里填寫呢?在pubspec.yaml中
version:1.0.0+1
第一次見到這個會很疑惑,后面的+1是什么意思呢?
在Android中,應用的版本分為versionCode?&?versionName
????versionCode:內部管理的版本號
????versionName:用戶顯示的版本號
在iOS中,應用的版本分為?version?&?build
????version:用戶顯示的版本????
????build:內部管理的版本
Flutter中我們如何管理這兩個版本號呢?
????1.0.0.0:用戶顯示的版本
????1:內部管理的版本
1.1.3. 用戶權限配置
在Android中某些用戶權限需要在AndroidManifest.xml進行配置:
????比如默認情況下應用程序是不能發(fā)送網(wǎng)絡請求的,如果之后App中有用到網(wǎng)絡請求,那么需要在AndroidManifest.xml中進行如下配置(默認debug模式下有配置網(wǎng)絡請求)
????比如我們需要訪問用戶的位置,那么需要在AndroidManifest.xml中進行如下配置
package="com.example.catefavor">
1.2. 應用程序簽名
Android系統(tǒng)在安裝APK的時候,首先會檢驗APK的簽名,如果發(fā)現(xiàn)簽名文件不存在或者校驗簽名失敗,則會拒絕安裝,所以應用程序在發(fā)布之前一定要進行簽名。
1.2.1. 創(chuàng)建一個秘鑰庫
在 macOS 或者 Linux 系統(tǒng)上,執(zhí)行下面的命令:
keytool?-genkey?-v?-keystore?~/key.jks?-keyalg?RSA?-keysize?2048?-validity?10000?-alias?key
在 Windows 系統(tǒng)上,執(zhí)行下面的命令:
keytool?-genkey?-v?-keystore?c:/Users/USER_NAME/key.jks?-storetype?JKS?-keyalg?RSA?-keysize2048-validity10000-alias?key
1.2.2. 在app中引用秘鑰庫
創(chuàng)建一個名為?/android/key.properties?的文件,它包含了密鑰庫位置的定義:
storePassword=<上一步驟中的密碼>
keyPassword=<上一步驟中的密碼>
keyAlias=key
storeFile=<密鑰庫的位置,e.g. /Users/<用戶名>/key.jks>
注意:這個文件一般不要提交到代碼倉庫
????修改.gitignore文件
# Android ignore
/android/key.properties
1.2.3. 在gradle中配置簽名
通過編輯?/android/app/build.gradle?文件來為我們的 app 配置簽名:
1.在?android?代碼塊之前添加:
android?{
...
}
替換為秘鑰庫的信息
????將?key.properties?文件加載到?keystoreProperties?對象中。
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
????keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
}
2.在?buildTypes?代碼塊之前添加:
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.debug
}
}
替換為下面的代碼:
build.gradle?文件中配置?signingConfigs?部分
signingConfigs?{
release?{
????keyAlias?keystoreProperties['keyAlias']
????keyPassword?keystoreProperties['keyPassword']
????storeFile?keystoreProperties['storeFile']???file(keystoreProperties['storeFile'])?:null
????storePassword?keystoreProperties['storePassword']
}
}
buildTypes?{
release?{
????signingConfig?signingConfigs.release
}
}
現(xiàn)在我們發(fā)布的app就會被自動簽名了
1.3. 打包應用程序
目前Android支持打包兩種應用程序:APK、AAB
APK文件:
Android application package
目前幾乎所有的應用市場都支持上傳APK文件
用戶直接安裝的就是APK文件
#?運行?flutter?build?apk?(flutter?build?默認帶有?--release?參數(shù))
flutter?build?apk
AAB文件:(推薦)
Android App Bundle
Google推出的一種新的上傳格式,某些應用市場不支持的
會根據(jù)用戶打包的aab文件,動態(tài)生成用戶設備需要的APK文件
#?運行 flutter build appbundle。?(運行 flutter build 默認構建一個發(fā)布版本。)
flutter?build?appbundle
1.4. 發(fā)布應用程序
Android應用程序可以發(fā)布到很多的平臺,包括國內的平臺和國外的Google Play
國內的應用市場非常多,包括360、百度、小米等等
可以根據(jù)不同的應用市場相關的規(guī)則,上傳對應的APK或者AAB文件,填寫相關的信息審核即可
國外的應用市場通常只有一個Google Play
1.需要申請一個Google Play 開發(fā)者賬號
需要支付25美元注冊費用的信用卡,信用卡需要支持Visa, Master Amex, Discover, JCB。
https://play.google.com/apps/publish/signup/
2.進入到管理中心,創(chuàng)建應用發(fā)布即可
進入了Google Play Console管理中心
need-to-insert-img
Google Play
二. iOS打包和發(fā)布
2.1. 填寫應用信息
2.1.1. 基本信息
和Android一致
2.1.2. 版本信息
和Android一致
2.1.3. 用戶權限配置
在iOS中某些權限,需要用戶允許,為了添加這些權限需要配置info.plist文件:
配置用戶權限
2.2. Apple開發(fā)者賬號
2.2.1. 申請開發(fā)者賬號
蘋果發(fā)布應用程序,必須申請一個Apple開發(fā)者賬號:
https://developer.apple.com/
1.填寫AppleID(沒有的話先申請AppleID)
2.加入開發(fā)者計劃
個人和公司:$99/年
企業(yè)賬號:$299/年
2.2.2. 配置相關證書
發(fā)布iOS應用程序需要配置相關的AppID和證書:
https://developer.apple.com/account/
登錄開發(fā)者的賬號:
下載和安裝證書,電腦才具備發(fā)布程序的能力
1.創(chuàng)建AppID(和自己的應用程序的AppID是一直的)
2.配置發(fā)布者證書(iOS Distribution)
need-to-insert-img
證書和描述文件
2.2.3. 創(chuàng)建發(fā)布App
我們需要在App Store創(chuàng)建一個新的應用程序:
https://appstoreconnect.apple.com/
新建App,并且填寫相關信息即可
need-to-insert-img
新建APP
2.3. 打包發(fā)布應用
2.3.1. Xcode登錄AppleID
在Xcode中登錄自己的AppleID
登錄AppleID
2.3.2. 打包和發(fā)布應用
應用簽名信息:
選擇應用簽名信息
打包應用程序:
1.設備選擇真機(這里必須選擇真機)
選擇真機設備
2.Product -> Archive -> Distribute App
發(fā)布程序
發(fā)布界面
注意:如果之前的應用程序是運行在模擬器上的,那么Archive時會報錯
需要刪除ios/Flutter目錄下之前生成的App.framework
因為這個framework默認是給模擬器生成的,我們發(fā)布的程序要跑在真機設備上
2.4. Application loader
目前很多應用程序的發(fā)布喜歡借助于Application loader,所有的流程都可以在這個工具中完成
具體的使用過程可以查找相關的資料,用法比較簡單