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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)push 极光通信
  4. Android: NDK编程入门笔记
  5. 从Android界面开发谈起
  6. 远程调测:Chrome on Android之三 调测WebView
  7. Android(安卓)学习笔记【基础扫盲篇】
  8. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  9. 【Android开发基础】应用界面主题Theme使用方法

随机推荐

  1. Android Android.mk && Application总结
  2. Error in an XML file: aborting build.
  3. Android:开发中遇到的异常Error解析
  4. Android 中如何处理双击事件
  5. Html、Flex、Android、JavaGUI、IOS前端
  6. android报错——The import android.util
  7. android 多用户管理UserManager
  8. android中列表选项、单选选项、多选选项
  9. Android开发傻瓜入门-开发自己的手机短信
  10. 终于找到一个类似wince 远程桌面控制andr