经历了漫长的征程,我们即将到达到目的地!也好似种了一季的庄稼,终于到了收割的时节了!
关于 Flutter 的 App 发布,官方其实有规范的文档可以参考的:
我们的游戏在这一块也不怎么特别!我们顺着文档一步一步地往下走!
本节概要
- 准备 iOS 发布
- 准备 Android 发布
准备 iOS 发布
我们从 iOS 应用开始吧!
你先得有自己的苹果开发者 ID,这个不需要多说了吧?如果没有,去 AppStore 下载苹果的 Developer App。使用这个 App,你可以完成苹果开发者的注册,以及 Program 的购买!
拥有开发者身份后,登录自己的 Apple 开发者页面。
首先,先注册我们要使用的 Bundle ID。在创建 Bundle ID 的过程中需要指定你使用的服务:
到目前,我们什么服务都没见有使用,什么都不用选,下一步到底,我们就完成了 Bundle ID 的注册了。
然后,我们要在 iTunes Connect 上创建我们的应用。
新建应用其中有一步,在 App Information 的 General Information 部分, 需要选择你第一步创建的 Bundle ID。
第一步创建 Bundle ID 后,这个地方可能不会马上出现新建的 Bundle ID 供你选择,我是等了一天之后才出现的。
其后,应用的基本信息和第一个版本有大量信息要填写和提供,包括应用的名称、宣传语、关键字、屏幕截图……
苹果的审核是全方位的,你看着办法吧,倒也不复杂!
这些信息配置好了之后,我们加到 Xcode,打开项目根目录下的 ios/Runner.xcworkspace,我们要确认应用的一些基本信息。
注意在 ios 文件夹下可能还存在一个 Xcode 可以打开的 Runner.xcproject 文件,注意我们要打开的是一个工作空间,而非仅 Runner 项目。
在 Xcode 项目导航器中选择 Runner 项目,在主视图边栏中,选择 Runner Target,然后在右侧选中 Gerneral 选项卡:
在 Identity 部分有两个信息需要确认:
- Display Name:要在主屏幕和其他地方显示的应用程序的名称,这里我们可以直接使用「棋路」。
- Bundle Identifier:之前在 iTunes Connect 上注册的 Bundle ID,之前示例中建立是 cn.apppk.books.flutterchess
应用的版本和 build 号也需要在在如上的 Gerneral 卡片上进行配置,Xcode 的版本号不会随着我们在 Flutter 项目的 pubspec.yaml 中的配置而自动修改,所以打包前别忘了修改版本。
除此以外,本地信息中还需要修改的就是我们的应用图标和 Splash 图片了。我们先来看看图标的尺寸要求:
iOS App 要求以下尺寸的应用图标:
- iPhone 通知:20x20, 2x, 3x
- iPhone 设置:29x29, 1x, 2x, 3x
- iPhone Stoplight:40x40, 2x, 3x
- iPhone App:60x60, 2x, 3x
- iPad 通知:20x20, 1x, 2x
- iPad 设置:29x29, 1x, 2x
- iPad Stoplight:40x40, 1x, 2x
- iPad App:76x76, 1x, 2x
- iPad Pro App:83.5x83.5, 2x
- App Store:1024x1024, 1x
你可以从这里下载我们的示例图标集直接使用。
为了避免应用启动时的白屏,你还可以配置 Launch Image,从这里下载我们提供的示例。
这些都做完了,就只剩下一样了:直接选择 Xcode 菜单 Archive 菜单项,构造我们的 Release 包吧。
过程中需要应用签名的时候,直接选择由 XCode 自动管理签名即可。在 Xcode 中直接上传代码到 AppStore,或是安装苹果推荐的专门传输工具 Transporter,都是你的选择!
这样一来,我们的应用就可以发布到 iPhone 和 iPad 设备上了,当然目前由于 Flutter 自身的问题,还不能发布到 iTV,相信很快就能实现这个小目标的。
准备 Android 发布
Android 的发布过程其实类似。这儿不需要 Google Play 或是哪个应用市场做配合的,做好自己本地的工作就完事了。
在前文中,我们已经为 Android 应用设置好了包名,现在我们需要确认的信息主要是应用的名称和图标了。
首先是确认应用名称。在 manifest 文件中,你可以修改应用的名称,这里使用「棋路」:
其次,Android 应用的图标需要你按屏幕密度提供。
Android 应用需要你提供以下几种尺寸的图标:
- hdpi:72x72
- mdpi:48x48
- xhdpi:96x96
- xxhdpi:144x144
- xxxhdpi:192x192
这里可以下载我们提供的示例图标,然后复制到应用的相应的目录替换默认的图标;
Flutter 的安卓应用的启动 Splash 是可以配置的,为了避免白屏,你应该修改 drawable 文件夹下的 launch_background.xml 文件,在这个文件中引用你的启动 Splash 图片,我们的 launch_background.xml 内容如下:
xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/game_light_bg" />
<item><bitmap android:gravity="center" android:src="@mipmap/launch" />item>
layer-list>
复制
文件中引用了 @mipmap/launch 中的图片,前边下载安装图标的图片压缩包已经包含了它。
如果你已经在 Flutter 项目的 pubspec.yaml 文件中指定了应用的版本和 Build 号,Android 中不需要特别去指定应用版本,它可以自动地从 pubspec.yaml 中去获取。
Android 的 Release 版本需要明确地指定签名方式,我们来处理象棋游戏的自动签名:
第一步,创建我们的 keystore:
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
复制
保持文件私密; 不要将它加入到公共源代码控制中
第二步,创建一个名为/android/key.properties
的文件,其中包含对密钥库的引用:
storePassword=
keyPassword= keyAlias=key storeFile= /key.jks> 复制
第三步,在 gradle 中配置签名:在 /android/app/build.gradle
文件中找到以下代码位置:
android {
复制
将它替换为:
def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android {
复制
继续在 /android/app.build.gradle
中找到以下代码位置:
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 } }
复制
将它替换为:
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } }
复制
这样就在 gradle 中添加好了自动签名任务了。
最后,在命令行下使用 flutter build apk
或 flutter build appbundle
,即可打包 Release 应用,拿你的 aar 或 apk 到各大市场去发布吧!
小节回顾
我们在本节中完成了游戏的 Logo、名称、版本信息的配置,也启用了 Android 的自动签名软件能力。你随时可以通过简单的命令生成我们的游戏的发布版本了。
但老实说,向应用市场发软件还有很多其它的事情需要考虑,例如使用什么样的游戏名称、关键字、描述对应用市场的搜索引才友好。制作什么样的动画或是截图,有利于用户快速地爱上我们的 App。在国内 Android 应用市场上线应该还需要申请软件版本登录等等……
这些步骤完成了,我们都还要面对0起点的应用推广?