Flutter象棋:13.打包上架

经历了漫长的征程,我们即将到达到目的地!也好似种了一季的庄稼,终于到了收割的时节了!

关于 Flutter 的 App 发布,官方其实有规范的文档可以参考的:

打包并发布 iOS 应用

打包并发布 Android 应用

我们的游戏在这一块也不怎么特别!我们顺着文档一步一步地往下走!

本节概要

  • 准备 iOS 发布
  • 准备 Android 发布

准备 iOS 发布

我们从 iOS 应用开始吧!

你先得有自己的苹果开发者 ID,这个不需要多说了吧?如果没有,去 AppStore 下载苹果的 Developer App。使用这个 App,你可以完成苹果开发者的注册,以及 Program 的购买!

拥有开发者身份后,登录自己的 Apple 开发者页面。

首先,先注册我们要使用的 Bundle ID。在创建 Bundle ID 的过程中需要指定你使用的服务:

创建 Bundle ID

到目前,我们什么服务都没见有使用,什么都不用选,下一步到底,我们就完成了 Bundle ID 的注册了。

然后,我们要在 iTunes Connect 上创建我们的应用。

在 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

配置应用的 Bundle ID 和版本

应用的版本和 build 号也需要在在如上的 Gerneral 卡片上进行配置,Xcode 的版本号不会随着我们在 Flutter 项目的 pubspec.yaml 中的配置而自动修改,所以打包前别忘了修改版本。

除此以外,本地信息中还需要修改的就是我们的应用图标和 Splash 图片了。我们先来看看图标的尺寸要求:

使用 Xcode 的 Assets工具,直接将图标拖进去就好了

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起点的应用推广?