本文由 简悦SimpRead 转码,原文地址 www.raywenderlich.com
你终于准备好为你的Flutter应用在Google Play商店上架了。本章包括发布和部署过程。
你已经完成了你的应用程序的构建,你已经准备好让全世界都来试试了。在本章中,你将学习如何准备你的应用程序,以便通过Google Play Store进行部署,然后发布它进行内部测试。在下一章中,你将为苹果的App Store做同样的事情。
你将遵循的启动你的应用程序的步骤很简单。
- 创建一个签名的发布版本。
- 为上传Play Store做准备。
- 上传构建文件。
- 通知测试人员构建已经准备好了。
要完成这一章,你需要一个Google Play开发者账户和一个实体安卓设备。
为发布进行设置
在你上传发布的构建之前,你需要用发布配置来构建它。当你创建一个新的Flutter项目时,你会自动创建一个调试构建配置。这在开发过程中很有帮助,但由于几个原因,它不适合用于商店提交。
- App bloat: 由于热重载/重启和源码调试所需的符号和开销,一个调试构建是额外大的。
- Resource keys: 典型的做法是将你的调试应用指向服务和分析的沙盒环境,这样你就不会污染生产数据或侵犯用户隐私。
- Unsigned: 调试构建还没有签名。要上传到商店,你需要对应用程序进行签名,以验证你是构建它的人。
- Google says so: Play Store不允许你上传一个可调试的应用程序。
该应用程序的配置分散在几个文件中。在接下来的步骤中,你将看到如何修改你的应用程序的一些关键部分,以准备提交你的构建。
如果你在前面的章节中一直关注着你的应用程序,请打开它并在本章中继续使用它。如果没有,只需找到本章的projects文件夹,在Android Studio中打开starter项目,并记得获取依赖项。
注意: 如果你使用启动程序,不要忘记在network/recipe_service.dart中添加你的
apiKey
和apiId
。
准备清单
调试构建得到广泛的权限,但通过信誉良好的商店发布的应用程序需要声明他们需要访问用户的硬件或系统的哪些方面。Android Manifest文件是你声明权限的地方。
打开android/app/src/main/AndroidManifest.xml。这个文件向Android操作系统描述了该应用程序。
在结束的</application>
标签下面添加以下权限。寻找写有<!-- add permissions here -->
的注释,在其下方添加以下代码。
<uses-permission android: />
通过这一行,你告诉Android,你的应用程序需要访问互联网才能运行。Flutter模板清单不包括任何权限。
注意: 如果你的下一个应用需要额外的权限,如访问摄像头或位置信息,请在此添加。
更新 build.gradle
build.gradle是你描述不同构建配置的地方。接下来你会改变它。当你设置应用程序时,你使用了默认的调试配置。现在,你将添加一个发布配置,以产生一个可以上传到Play Store的包。
打开android/app/build.gradle。
在android {
下,你会看到defaultConfig
的定义。这描述了应用程序的ID、版本信息和SDK版本。
当分配applicationId
时,你通常使用你的名字或你公司的名字。
applicationId "com.raywenderlich.recipe_finder"
本书使用com.raywenderlich.recipe_finder,这意味着你向商店提交时需要使用不同的名称。为了避免因应用程序已经存在于Play Store而出现错误,在上传应用程序时,请使用你或你的企业名称所特有的东西。请确保使用小写字母,不要使用空格或特殊字符。
将 "applicationId "改为独特的内容。例如,你可以在引号内的文本末尾添加字母。要有创造性 :]
将targetSdkVersion改为29,如果它不是29或更高的话。
targetSdkVersion 29
minSdkVersion
是支持该应用的最早的Android操作系统版本,而targetSdkVersion
则是你设计该应用的版本。设置这个会在早期操作系统版本上启动兼容模式,并在Play Store上触发不同的检查。
你的下一步是创建一个签名密钥,使你的应用程序足够安全,可以在Play Store中使用。
创建一个签名密钥
在你发布应用程序之前,你需要签署它。这可以确保所有未来的版本都来自同一个开发者。 要签署应用程序,你首先需要通过创建一个keystore来制作一个签署密钥,这是一个安全的证书和私钥的存储库。
在下一步中,你会看到一个输入密码的提示。有一些关键的事情要知道。
- 使用任何你喜欢的六个字符的密码,但一定要记住它。你每次访问钥匙库时都需要这个密码,你每次上传新版本的应用程序时都需要这样做。
- 除了密码之外,你还需要提供关于你自己和你的组织的信息。这是证书的一部分,所以不要输入你不想让别人看到的内容。
- 一旦你输入并确认了这些信息,该工具将创建.jks文件,并将其保存在运行该命令的目录中。
打开一个终端窗口,导航到项目根目录。
注意:如果你用启动器项目开始本章,那么根项目目录就是启动器文件夹。
运行下面的命令。
keytool -genkey -v -keystore recipes.jks -keyalg RSA -keysize 2048 -validity 10000 -alias recipes
keytool是一个从Terminal运行的Java命令,可以生成一个钥匙库。你把它保存在文件中,recipes.jks。
该密钥库包含一个具有指定 -alias recipes
的密钥。稍后你将使用这个密钥来签署你将上传到Play Store的软件包。
注意。保持钥匙库的安全并远离任何公共仓库是很重要的。把它添加到.gitignore将有助于保护你的文件。如果有人获得了密钥的访问权,他们可以造成各种混乱,比如在发布恶意应用程序时假装是你。
访问签名密钥
现在你已经创建了一个密钥,你需要向构建系统提供必要的信息来访问它。为了做到这一点,你将创建一个单独的文件来存储密码信息。
注意。重要的是要保持这个文件的秘密,不要把它检查到公共资源库,就像keystore文件一样。如果一个恶意的行为者拥有这个文件和你的keystore,他们可以很容易地冒充你。
在android文件夹中,创建一个新文件。key.properties。
将其内容设置为
storePassword={YOUR PASSWORD}。
keyPassword={YOUR PASSWORD}。
keyAlias=recipes
storeFile=././recipes.jks
storePassword
和keyPassword
应该是你提供给keytool
命令的相同密码,没有任何标点符号。
keyAlias
与keytool
命令末尾的-alias
相同。
storeFile
是你创建的钥匙库的路径。它是相对于android/app的,所以如果有必要,请确保改变路径。
你需要这些值来解锁钥匙库中的钥匙并签署应用程序。在下一步,你将在构建过程中从该文件中读取。
引用签署密钥
你现在有了一个密钥和它的密码,但签名并不会自动发生。在构建过程中,你需要打开钥匙库并签署应用程序捆绑包。要做到这一点,你需要修改构建......而当你考虑修改构建过程时,你应该考虑build.gradle。
打开android/app/build.gradle。
在android {
部分之前,找到// Add keystore properties here
并添加以下内容。
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
在这里,你定义了一个新的Properties
,它读取key.properties并将内容加载到keystoreProperties
中。在文件的顶部,你会看到类似的东西,从local.properties加载Flutter属性。
接下来,在 "android "部分的顶部,确保 compileSdkVersion
与你上面设置的 targetSdkVersion
一致。它应该是29。如果compileSdkVersion
不是29或更高,请更新它。
compileSdkVersion 29
另外,在 android
部分,找到// add signing release config here
,就在 defaultConfig
块之后,添加。
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias'] ...
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile'] ) : null
storePassword keystoreProperties['storePassword'] ?
}
}
这就定义了一个签名配置,然后直接将从属性文件加载的值映射到release
配置中。
最后,将现有的buildTypes
块替换为。
buildTypes {
release {
signingConfig signingConfigs.release
}
这定义了 release signingConfig
,它是一个特定的 Android 构建结构,使用之前声明的 `release 签名配置创建。当你创建一个发布版构建时,你会使用它。
现在,你已经创建了一个发布配置并进行了设置。下一步是为发布构建应用程序。
构建一个应用程序捆绑包
有了build.gradle,你可以把创建签名的Android应用包的最后步骤留给Flutter构建系统。这个捆绑包将包含你上传你的应用程序到Play商店所需的一切。
打开一个终端窗口,导航到项目目录并运行。
flutter build appbundle
这将为该项目建立一个安卓应用包(AAB)。它可能需要几分钟的时间来完成。当它完成后,命令输出将告诉你在哪里可以找到.aab文件。
注意:如果你收到一条错误信息,说明没有找到keystore文件,请确保你在key.properties中的
storeFile=
行的路径有正确的路径来生成recipes.jks。
捆绑包只是一个.zip文件,包含了编译后的代码、资产和元数据。你将在下一节中把它发送给谷歌。
AAB与APK
如果你已经用Android工作了一段时间,你可能会期望创建一个APK文件。当你从Android studio进行调试构建时,你会得到一个APK文件。
你可以以APK或AAB的形式发布一个安卓应用。Play Store倾向于使用应用程序捆绑包,但你也可以使用APK在其他商店发布,或用于sideloading到设备上。
注意:sideloading是指在不使用官方Google Play商店的情况下在安卓设备上安装一个应用程序。在将你的设备配置为允许运行未知来源的应用程序后,你可以安装通常以APK文件分发的应用程序。
如果你想创建一个APK发布,使用以下命令。
flutter build apk --split-per-abi
这将创建发布构建的APK。--split-per-abi
标志为每个支持的目标制作单独的APK,如x86、arm64等。这可以减少输出的文件大小。一个 "胖 "APK,包含对所有目标的支持,可能会有很大的尺寸。要制作一个肥大的APK而不是分割的APK,只需省略该标志。
上传到Google Play商店
将你的应用程序推广到广阔世界的下一步是将其上传到Google Play商店。你需要一个Google Play开发者账户来做这件事。
打开play.google.com/console/。如果你看到注册的提示,请按照屏幕上的指示,创建一个开发者账户。加入谷歌开发者计划需要支付象征性的费用。如果你不想注册,你可以继续通过sideloading分发APK文件。
本书将不涉及创建账户的具体步骤,因为这些说明的变化比本书快。只要按照谷歌的指导进行操作,直到你进入谷歌游戏控制台。
创建一个新的应用程序
一旦你进入了Play Console,下一步就是创建一个应用程序。这给了你一个上传你的构建的地方。大的创建应用程序按钮将起到作用--点击它就可以开始了。该按钮的位置取决于这是否是你的第一个应用程序。
接下来,你会看到关于该应用程序的一些基本信息的提示。你还需要同意开发者计划政策。
如果你对接受声明感到满意,再次点击创建应用程序。
请注意,创建一个应用程序只是在Play Store中创建一个记录。这可以让你处理预发布活动,上传构建和填写商店信息。它不会向商店发布任何东西,也不会使任何东西公开。在发布应用程序之前,你还有很多信息需要添加。
提供资产和描述
在发布之前,你的下一步是上传应用资产,如图标和屏幕截图,并为应用提供描述。你将在主商店列表标签中完成这项工作。
在左边,在成长部分下展开商店存在,并选择主要商店列表。
在这里,你将输入关于你的应用程序面向客户的信息,这是发布所需的。该页面有两个部分。应用程序详情和图形。
在应用详情部分,输入简短描述和完整描述。
例如,这个应用程序的简短描述可能是。
This is an app to find recipes on the web.
Here’s an example for the full description:
With Recipe Finder, the world’s premier recipe search app, you’ll find all sorts of interesting things to cook. Bookmark your favorite ones to put together a shopping list.
图形部分让你上传特殊的艺术和屏幕截图。你可以在本章材料顶部的assets/store graphics中找到这些的样本版本。
对于App icon,请上传app_icon.png。这是一个大的、512×512px的启动器图标版本。
Feature graphic是你用来在Play Store推广你的应用程序的图片。上传feature_graphic.png作为该资产。它是一张1024×500px的风格化图片,用于推广应用的品牌形象。
接下来,你需要添加屏幕截图。商店要求提供手机、7英寸平板和10英寸平板的图片尺寸。幸运的是,你不必为每个可能的屏幕尺寸上传屏幕截图,只需上传一个代表。
对于手机屏幕截图,上传phone1.png、phone2.png和phone3.png。这些都来自于模拟器上的截图。
尽管Recipe Finder并不是为平板电脑设计的,但它可以在平板电脑上运行。在这些情况下,包括屏幕截图也是很好的做法。
对于7英寸平板电脑的屏幕截图,上传7in.png。
对于10英寸的平板电脑屏幕截图上传10in.png。
对于本章,你不会上传视频,因为这需要设置一个YouTube账户。然而,对于你的制作应用程序来说,一个展示你的应用程序功能的视频是一个好主意。
点击保存,保存你到目前为止所输入的图像和细节。
现在,你已经定义了足够的存在,可以给人留下印象。
输入其余的信息
然而,你仍然没有添加足够的信息,以便Play Store允许你发布你的应用程序。因为你可以在商店中推广上传的构建物进行销售,Play控制台希望你首先填写很多信息。
点击Dashboard按钮,即控制台左侧导航栏的最上面一项,找到设置你的应用程序部分。这显示了你在发布你的应用程序之前需要填写的所有项目的检查清单。
你之前执行的步骤完成了设置你的商店列表的目标,所以它已经被选中。
点击每个项目,填写所需信息。如果你在这个过程中迷路了,请回到仪表板,再次找到设置你的应用程序部分。
因为这是一个简单的食谱应用程序,没有很多有争议的内容--除了什么算作 "三明治 "之外--答案是直接的。在你的应用程序在Play Store上线之前,你还有时间来修改你的任何选择。
以下是让你开始的设置样本。
请确保在更新每个页面后点击保存,然后回到仪表板选择下一步。
应用程序访问
对于应用程序访问,选择所有功能都可以使用,因为没有任何限制。
广告
对于广告,表示该应用程序不包含广告。
内容评级
要获得内容评级,你必须回答一份调查问卷。点击开始问卷调查。
问卷有几个步骤。首先是指定类别。输入你的电子邮件地址,选择参考、新闻或教育类,然后点击下一步。
你需要回答有关你的应用程序内容的几个问题。请务必在做出选择之前阅读每一个问题。你的应用程序只包含菜谱,没有任何购买食材的功能,所以你可以对所有内容问题选择否。当你完成后,点击保存**。
保存好你的选择后,点击下一步,查看摘要页。
如果一切看起来不错,点击提交。然后你会看到内容评级页。
点击顶部的返回箭头,回到仪表板,继续目标受众和内容。
目标受众和内容
这个应用程序不适合儿童,所以只需选择18岁及以上。这样一来,如果用户查找酱油菜,如肉酱,就不会有问题。
下一个问题问的是你的Store presence。选择你喜欢的选项,然后点击下一个。
屏幕上将显示一个摘要。注意选择是和否的区别。
再次点击返回箭头,回到仪表板,准备为新闻部分设置细节。
新闻
这不是一个新闻应用程序。
应用程序类别
回到仪表板,点击选择一个应用类别并提供联系细节。
对于应用程序类别,选择书和参考资料,因为这是一个参考资料应用程序。对于联系方式,你需要一些真正的业务联系信息来发布到商店。然而,为了测试,填写无意义的信息也是可以的。
点击右下方的保存。
应用程序定价和商家信息
如果你的Google Play商店账户是新的,而且你还没有设置你的财务信息,你需要让Google知道在哪里汇款。不过在这种情况下,这并不是什么大问题,因为这是一个免费的应用程序。
要改变价格,在仪表板页面的顶部找到搜索栏。输入定价,然后点击应用程序定价。
在这种情况下,你将发布一个免费的应用程序,这是默认值。
现在,你终于准备好设置发布和上传构建了。
上传构建程序
在你的应用程序的旅程中,下一步是上传一个构建用于测试。Play Store提供不同级别的测试。
在你的应用程序的旅程中,下一步是上传一个构建以进行测试。Play Store提供不同级别的测试。
内部测试。打算在你的组织内或与一小群朋友或客户进行测试,它限制在100人以内。你一般会在开发周期内使用这个版本。 封闭式测试。允许你向仅有的邀请名单发送构建版本。将此用于alpha或beta版本,实验以及从更多的客户或审查者那里收集反馈。 公开测试。一个任何人都可以加入的公开测试。用它来收集对已完成的版本的反馈。
在任何这些轨道中,上传构建的步骤都是相似的。本章的重点是内部测试。
转到左边菜单中的发布部分。展开测试▸内部测试,点击创建新版本。
如果有提示,请阅读条款和条件。如果你不反对它们,就接受它们。
要使用谷歌更喜欢的安卓应用包,你必须允许Google Play创建你的应用签名。欲了解更多信息,请点击了解更多。当你完成后,点击继续。
当你运行flutter build
时,它将app-release.aab放在你当前项目的文件夹层次中。这个位置并不是你的Flutter项目的一部分,在你的IDE中也不可见。
默认情况下,该目录是。build/app/outputs/bundle/release/。打开Finder或Windows Explorer并导航到这个发布文件夹。
将应用程序捆绑文件拖到发布页面中间的放置或上传文件的方框中。
上传完成后,剩下的事情就是创建一个发布名称和发布说明。
版本名称默认为版本号,但你可以把它重命名为在你以后需要参考该版本时有帮助的名称。例如,第一个测试版本。
使用发行说明来通知用户有什么变化,或者你想让他们寻找特定的问题。你可以用多种语言提供这个信息。
例如。
<en-US>
This release is just to demonstrate uploading and sending out a build.
</en-US>
当你完成后,点击Save。这就保存了发布信息。
要发布它,接下来点击审查发布。
发布
在下一个屏幕上,如果在错误、警告和信息下有任何错误,你必须在继续之前解决它们。带着警告推出是可以的,比如说缺乏调试符号。
一旦你解决了所有的问题,请点击开始推广到内部测试。
你会得到另一个确认对话框。点击滚出。
当版本显示可供内部测试人员使用时,你的应用程序就可以进行测试了。祝贺你!
注意。在应用程序变得可用之前需要一些时间,从几分钟到可能几天。请保持耐心。
点击测试者标签,然后创建电子邮件列表,创建一个新的测试者列表。
给列表起个名字,并添加你在手机上用于Play Store的谷歌账户电子邮件。
有几种方法可以在你的手机上获得该应用程序。最简单的是使用网络链接,你可以在测试者如何加入你的测试中找到。
点击复制链接并将其发送到自己的安卓设备上。一定要点击保存更改。
安装应用程序
使用你的安卓设备上的网络浏览器,导航到该链接,你会看到加入测试的邀请。
点击ACCEPT INVITE会给你一个到Play Store的链接,以下载该应用程序。一旦你进入了Play Store,只需点击安装。
在应用程序加载后,您就可以开始了。
恭喜你,你刚刚在你的本地机器上建立了一个Flutter应用程序,把它上传到Google Play并下载到你的设备上 鞠躬吧,这真是一个了不起的成就。
关键点
- 发布构建需要一个签名的发布配置。
- 要上传到Google Play商店,你需要列出所有必要的权限。
- 要测试一个应用程序,请到Google Play控制台,用商店元数据创建应用程序,创建一个版本,上传构建并邀请测试人员。
从哪里开始?
在大多数情况下,你不需要Flutter工具来准备发布的应用包。这都是Android特有的工作。要了解更多关于Android Studio如何帮助准备和签署发布构建以及如何使用Google Play控制台的信息,请查看我们的Android学徒书。www.raywenderlich.com/books/andro…。这本书更深入地介绍了Google Play Console。
特别是,一旦你对你的应用做了足够的内部测试,你可以推广发布,进行**封闭测试。这意味着你的应用通过了App Review,并可在Play Store中使用,但它未被列入名单。这可以让你与更多的测试者分享它。
之后,你可以将该版本推广到开放测试,这是一个任何人都可以加入的公开测试版,或者将其作为一个正式的生产版本发送出去。
在下一章中,你将在苹果的App Store上发布Recipe Finder。准备好!