Flutter 项目打包发布
Android流程
替换应用Icon和应用名称
在/android/app/src/main/res 目录下,替换ic_launcher.png为正式的项目图标。
在/android/app/src/main/AndroidManifest.xml文件中,修改Application标签下android:label的值的应用名称
生成签名文件并添加签名配置
创建签名文件keystore
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
在命令行输入以上命令后,按照提示输出对应信息。然后会在当前目录生成key.jks签名文件。
注意不要把签名文件放在开源的源码管理系统中
在App中引用生成keystore文件
在/android目录下创建key.properties文件,包含了keystore使用配置参数。
storePassword = <前一步的keystore密码>
keyPassword = <前一步的别名密码>
keyAlias = key //别名
storeFile = <key.jks文件路径>
在Gradle文件中配置签名信息
在/android/app/build.gradle文件配置签名信息。
- 读取key.properties配置文件
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
- 添加签名配置
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildType {
release {
signConfig signingConfigs.release
}
}
启用混淆配置
默认情况下,Flutter不会混淆和压缩Android原生代码,当项目使用的第三方依赖库需要添加混淆配置时,需要添加Flutter相关类的禁止混淆策略。
配置混淆文件
创建/android/app/proguard-rules.pro文件,并添加以下规则:
## Flutter相关类
-keep class io.flutter.app.** {*;}
-keep class io.flutter.plugin.** {*;}
-keep class io.flutter.util.** {*;}
-keep class io.flutter.view.** {*;}
-keep class io.flutter.** {*;}
-keep class io.flutter.plugins.** {*;}
上面这些配置会保护Flutter引擎类库不会混淆。
启动混淆和压缩
编辑/android/app/build.gradle文件,在release编译类型下添加混淆和压缩配置。
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
检查build配置文件
检查/android/app目录下的build.gradle文件,
- applicationId: 应用唯一标识
- versionCode 和 versionName:指定应用内部版本号和外部展示版本号,也可以通过pubspec.yaml文件设置版本属性
- minSdkVersion和targetVersion:指定应用最小支持的SDK版本和目标运行SDK版本
构建发布的应用
- App bundle
- Apk
构建App bundle
Google Play Store更期望使用app bundle格式。
执行构建命令
在命令行输入以下命令:
cd <app dir>
flutter build appbundle //flutter build默认是release构建
构建结果在 /build/app/outputs/bundle/release/app.aab
默认情况下,app bundle包含了针对 armeabi-v7a 和 arm64-v8a 平台构建的Dart代码和Flutter引擎。
测试生成的App bundle文件
- 离线测试,使用bundle tool
1.1 在GitHub仓库下载buildtool
1.2 根据app bundle文件生成一系列apk
1.3 在真机上安装apk文件
- 在线测试,使用Google Play
利用Google Play市场提供的 alpha 或 beta渠道功能来测试上传的App bundle文件。具体操作见
https://developer.android.com/studio/publish/upload-bundle
构建Apk
考虑到某些应用市场不支持App bundle格式,所以需要构建成apk格式。
执行构建命令
在命令行输入以下命令:
cd <app dir>
flutter build apk --split-per-abi
上述打包命令会在/build/app/outputs/apk/release目录下生成两个apk文件:
- app-armeabi-v7a-release.apk
- app-armeabi-v8a-release.apk
移除 --split-per-abi参数后,会生成支持所有ABI平台的Apk文件,这样会导致文件体积变大。
Flutter暂不支持x86平台 说明
安装到真机上
cd <app dir>
flutter install
iOS流程
下面流程讲述了如何打包iOS应用,发布到App Store和TestFlight上。
初步检查
在 App Store Connect中注册应用
App Store Connect 用来管理应用的声明周期,包括定义应用名称、描述、截图、价格,并管理释放到App Store和TestFlight
注册Bundle ID
Bundle ID是每一个应用的唯一标识,也是在Apple注册的唯一标识。
- 在开发者账户中打开App IDs页面
- 点击加号创建新的Bundle ID
- 输入应用名称,选择Explicit App ID,输入前一步创建的ID
- 选择应用需要使用的服务,点击下一步
- 确认详细信息,点击 Register 注册你的Bundle ID
在 App Store Connect中创建应用记录
- 在浏览器中打开 App Store Connect
- 在首页点击 My Apps
- 点击左上角加号,选择 New App
- 在表单中填写应用详细信息,在平台部分,确认iOS被勾选。目前Flutter还不支持tvOS,所以不要勾选该选项,点击 Create
- 导航到应用详情,在侧边栏选择 App Information
- 在通用信息栏,选择你之前注册的Bundle ID
更详细的说明见https://help.apple.com/app-store-connect/#/dev2cd126805
检查Xcode工程配置
在这一步,将需要在Xcode工作空间检查一些重要的配置。更详细的步骤和说明见https://help.apple.com/xcode/mac/current/#/dev91fe7130a
- 在Flutter应用的ios文件中,打开Runner.xcworkspace
- 依次选择 Runner(Xcode应用导航) -> Runner(un主视图侧边栏) -> General标签
检查下面的设置:
标识部分:
- Display Name:应用名称
- Bundle Identifier:在App Store Connect注册的应用ID
签名部分:
- Automatically manage signing: 控制Xcode是否自动管理应用签名和供应
- Team:选择和你注册的开发者账户关联的团队
分发信息部分:
- Deployment Target: 应用支持的最低iOS版本。Flutter支持iOS8.0以上版本。如果你的应用包含了Objective-C或Swift代码,并且这些代码使用iOS8.0不支持的API,需要改掉。
配置完成后的样子大概如下所示:
[外链图片转存失败(img-Yotek9U2-1562153812236)(https://flutter.dev/images/releaseguide/xcode_settings.png)]
添加应用Icon
替换默认占位icon
创建构建存档
输入命令:
- 执行 flutter build ios创建release构建
- 在Xcode8.3之前,release模式配置不会自动刷新,需要手动重启
在Xcode配置应用版本并执行构建
- 在Xcode中,打开Runner.xcworkspace文件
- 选择 Product > Scheme > Runner
- 选择 Product > Destination > Generic iOS Device
- 依次选择 Runner(Xcode应用导航) -> Runner(un主视图侧边栏)
- 在Identity部分,更新需要发布的版本号
- 在Identity部分,更新Build标识为唯一构建号来追踪此次构建
最后,创建构建存档,上传到App Store Connect
- 选择 Product > Archive来发起构建存档
- 在Xcode组织窗口,选择你的iOS应用,然后选择刚刚创建的构建存档
- 点击 Validate 按钮,来验证此次构建是否有问题
- 验证成功后,点击 Upload to App Store…,然后可以在App Store Connect上关注构建状态
大概30分钟后,你会收到一份邮件,通知你的构建已经验证成功并可以在TestFlight上释放给测试人员,或者直接释放你的应用到App Store。
释放应用到TestFlight
TestFlight允许开发者发布他们的应用给内部或外部的测试人员。
- 导航到App Store Connect上应用程序应用程序详细信息页面的TestFlight选项卡 。
- 在侧栏中选择内部测试。
- 选择要发布到测试人员的构建,然后单击“ 保存”。
- 添加任何内部测试人员的电子邮件地址。您可以在App Store Connect的“用户和角色”页面中添加其他内部用户,可从页面顶部的下拉菜单中找到。
有关更多详细信息,请参阅使用TestFlight分发应用程序。
释放应用到App Store
- 从App Store Connect上应用程序的应用程序详细信息页面的侧栏中选择定价和可用性,并填写所需信息。
- 从侧栏中选择状态。如果这是此应用程序的第一个版本,其状态将为1.0准备提交。填写所有必填字段。
- 点击提交以供审核。
Apple将在应用审核流程完成后通知您。您的应用程序将根据您在“ 版本发布”部分中指定的说明进行发布。
有关更多详细信息,请参阅通过App Store分发应用程序。