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 = 

在Gradle文件中配置签名信息

在/android/app/build.gradle文件配置签名信息。

  1. 读取key.properties配置文件
def keystoreProperties = new Properties()def keystorePropertiesFile = rootProject.file('key.properties')if (keystorePropertiesFile.exists()) {    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))}android {    ...
  1. 添加签名配置
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文件,

  1. applicationId: 应用唯一标识
  2. versionCode 和 versionName:指定应用内部版本号和外部展示版本号,也可以通过pubspec.yaml文件设置版本属性
  3. minSdkVersion和targetVersion:指定应用最小支持的SDK版本和目标运行SDK版本

构建发布的应用

  • App bundle
  • Apk

构建App bundle

Google Play Store更期望使用app bundle格式。

执行构建命令

在命令行输入以下命令:

cd flutter build appbundle //flutter build默认是release构建

构建结果在 /build/app/outputs/bundle/release/app.aab

默认情况下,app bundle包含了针对 armeabi-v7a 和 arm64-v8a 平台构建的Dart代码和Flutter引擎。

测试生成的App bundle文件

  1. 离线测试,使用bundle tool

1.1 在GitHub仓库下载buildtool
1.2 根据app bundle文件生成一系列apk
1.3 在真机上安装apk文件

  1. 在线测试,使用Google Play
    利用Google Play市场提供的 alpha 或 beta渠道功能来测试上传的App bundle文件。具体操作见
    https://developer.android.com/studio/publish/upload-bundle

构建Apk

考虑到某些应用市场不支持App bundle格式,所以需要构建成apk格式。

执行构建命令

在命令行输入以下命令:

cd 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 flutter install

iOS流程

下面流程讲述了如何打包iOS应用,发布到App Store和TestFlight上。

初步检查

  1. 检查应用是否符合苹果的应用审核规范
  2. 是否申请了苹果开发者账户

在 App Store Connect中注册应用

App Store Connect 用来管理应用的声明周期,包括定义应用名称、描述、截图、价格,并管理释放到App Store和TestFlight

注册Bundle ID

Bundle ID是每一个应用的唯一标识,也是在Apple注册的唯一标识。

  1. 在开发者账户中打开App IDs页面
  2. 点击加号创建新的Bundle ID
  3. 输入应用名称,选择Explicit App ID,输入前一步创建的ID
  4. 选择应用需要使用的服务,点击下一步
  5. 确认详细信息,点击 Register 注册你的Bundle ID

在 App Store Connect中创建应用记录

  1. 在浏览器中打开 App Store Connect
  2. 在首页点击 My Apps
  3. 点击左上角加号,选择 New App
  4. 在表单中填写应用详细信息,在平台部分,确认iOS被勾选。目前Flutter还不支持tvOS,所以不要勾选该选项,点击 Create
  5. 导航到应用详情,在侧边栏选择 App Information
  6. 在通用信息栏,选择你之前注册的Bundle ID

更详细的说明见https://help.apple.com/app-store-connect/#/dev2cd126805

检查Xcode工程配置

在这一步,将需要在Xcode工作空间检查一些重要的配置。更详细的步骤和说明见https://help.apple.com/xcode/mac/current/#/dev91fe7130a

  1. 在Flutter应用的ios文件中,打开Runner.xcworkspace
  2. 依次选择 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

创建构建存档

输入命令:

  1. 执行 flutter build ios创建release构建
  2. 在Xcode8.3之前,release模式配置不会自动刷新,需要手动重启

在Xcode配置应用版本并执行构建

  1. 在Xcode中,打开Runner.xcworkspace文件
  2. 选择 Product > Scheme > Runner
  3. 选择 Product > Destination > Generic iOS Device
  4. 依次选择 Runner(Xcode应用导航) -> Runner(un主视图侧边栏)
  5. 在Identity部分,更新需要发布的版本号
  6. 在Identity部分,更新Build标识为唯一构建号来追踪此次构建

最后,创建构建存档,上传到App Store Connect

  1. 选择 Product > Archive来发起构建存档
  2. 在Xcode组织窗口,选择你的iOS应用,然后选择刚刚创建的构建存档
  3. 点击 Validate 按钮,来验证此次构建是否有问题
  4. 验证成功后,点击 Upload to App Store…,然后可以在App Store Connect上关注构建状态

大概30分钟后,你会收到一份邮件,通知你的构建已经验证成功并可以在TestFlight上释放给测试人员,或者直接释放你的应用到App Store。

释放应用到TestFlight

TestFlight允许开发者发布他们的应用给内部或外部的测试人员。

  1. 导航到App Store Connect上应用程序应用程序详细信息页面的TestFlight选项卡 。
  2. 在侧栏中选择内部测试。
  3. 选择要发布到测试人员的构建,然后单击“ 保存”。
  4. 添加任何内部测试人员的电子邮件地址。您可以在App Store Connect的“用户和角色”页面中添加其他内部用户,可从页面顶部的下拉菜单中找到。

有关更多详细信息,请参阅使用TestFlight分发应用程序。

释放应用到App Store

  1. 从App Store Connect上应用程序的应用程序详细信息页面的侧栏中选择定价和可用性,并填写所需信息。
  2. 从侧栏中选择状态。如果这是此应用程序的第一个版本,其状态将为1.0准备提交。填写所有必填字段。
  3. 点击提交以供审核。

Apple将在应用审核流程完成后通知您。您的应用程序将根据您在“ 版本发布”部分中指定的说明进行发布。

有关更多详细信息,请参阅通过App Store分发应用程序。

更多相关文章

  1. Android listview中嵌套Checkbox的布局文件
  2. Android 应用程序获得系统权限
  3. Android CTS(兼容性测试)整个流程
  4. android studio导入 so ,jar 文件。
  5. IDA动态调试Android的DEX文件
  6. Android单元测试全解
  7. Android应用程序设计——入门配置
  8. android反编译apk文件
  9. 在测试环境模拟电话的进入和短信的进入

随机推荐

  1. Android 内存泄漏优化汇总
  2. Android 界面中隐藏项目名称
  3. android提示:Gradle DSL method not found
  4. Android(安卓)ADB 命令
  5. android GestureDetector 基于webview的
  6. Android——文件存储
  7. 修改android框架代码
  8. 布局属性
  9. 安卓开发笔记(六)—— SQLite数据库与Conte
  10. 安卓-关于EditText的那些事......