一. Android打包和發佈
1.1. 填寫應用配置
1.1.1. 基本信息
在之前講解應用程序的配置信息時,我們已經介紹過,這裏不再過多介紹
- 應用的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進行配置:
- 比如默認情況下應用程序是不能發送網絡請求的,如果之後App中有用到網絡請求,那麼需要在AndroidManifest.xml中進行如下配置(默認debug模式下有配置網絡請求)
- 比如我們需要訪問用戶的位置,那麼需要在AndroidManifest.xml中進行如下配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.catefavor">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
</manifest>
1.2. 應用程序簽名
Android系統在安裝APK的時候,首先會檢驗APK的簽名,如果發現簽名文件不存在或者校驗簽名失敗,則會拒絕安裝,所以應用程序在發佈之前一定要進行簽名。
1.2.1. 創建一個祕鑰庫
在 macOS 或者 Linux 系統上,執行下面的命令:
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
在 Windows 系統上,執行下面的命令:
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
1.2.2. 在app中引用祕鑰庫
創建一個名爲 /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 配置簽名:
- 在 android 代碼塊之前添加:
android {
...
}
替換爲祕鑰庫的信息
- 將 key.properties 文件加載到 keystoreProperties 對象中。
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
}
- 在 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
}
}
現在我們發佈的app就會被自動簽名了
1.3. 打包應用程序
目前Android支持打包兩種應用程序:APK、AAB(推薦)
APK文件:
- Android application package
- 目前幾乎所有的應用市場都支持上傳APK文件
- 用戶直接安裝的就是APK文件
# 運行 flutter build apk (flutter build 默認帶有 --release 參數)
flutter build apk
AAB文件:(推薦)
- Android App Bundle
- Google推出的一種新的上傳格式,某些應用市場不支持的
- 會根據用戶打包的aab文件,動態生成用戶設備需要的APK文件
# 運行 flutter build appbundle。 (運行 flutter build 默認構建一個發佈版本。)
flutter build appbundle
1.4. 發佈應用程序
Android應用程序可以發佈到很多的平臺,包括國內的平臺和國外的Google Play
國內的應用市場非常多,包括360、百度、小米等等
- 可以根據不同的應用市場相關的規則,上傳對應的APK或者AAB文件,填寫相關的信息審覈即可
國外的應用市場通常只有一個Google Play
-
需要申請一個Google Play 開發者賬號
- 需要支付25美元註冊費用的信用卡,信用卡需要支持Visa, Master Amex, Discover, JCB。
- 谷歌支付網站
-
進入到管理中心,創建應用發佈即可
- 進入了Google Play Console管理中心
二. iOS打包和發佈
2.1. 填寫應用信息
2.1.1. 基本信息
和Android一致
2.1.2. 版本信息
和Android一致
2.1.3. 用戶權限配置
在iOS中某些權限,需要用戶允許,爲了添加這些權限需要配置info.plist文件:
2.2. Apple開發者賬號
2.2.1. 申請開發者賬號
蘋果發佈應用程序,必須申請一個Apple開發者賬號:
- 蘋果開發者網站
- 填寫AppleID(沒有的話先申請AppleID)
- 加入開發者計劃
- 個人和公司:$99/年
- 企業賬號:$299/年
2.2.2. 配置相關證書
發佈iOS應用程序需要配置相關的Apple ID和證書:
- 蘋果開發者個人賬戶
- 登錄開發者的賬號:
- 下載和安裝證書,電腦才具備發佈程序的能力
- 1.創建AppID(和自己的應用程序的AppID是一直的)
- 2.配置發佈者證書(iOS Distribution)
2.2.3. 創建發佈App
我們需要在App Store創建一個新的應用程序:
- 應用發佈網站
- 新建App,並且填寫相關信息即可
2.3. 打包發佈應用
2.3.1. Xcode登錄AppleID
在Xcode中登錄自己的AppleID
2.3.2. 打包和發佈應用
應用簽名信息:
打包應用程序:
- 設備選擇真機(這裏必須選擇真機)
- Product -> Archive -> Distribute App
注意:如果之前的應用程序是運行在模擬器上的,那麼Archive時會報錯
- 需要刪除ios/Flutter目錄下之前生成的App.framework
- 因爲這個framework默認是給模擬器生成的,我們發佈的程序要跑在真機設備上
2.4. Application loader
目前很多應用程序的發佈喜歡藉助於Application loader,所有的流程都可以在這個工具中完成
- 具體的使用過程可以查找相關的資料,用法比較簡單