The Android Developer Challenge is back! Submit your idea before December 2.

准备发布

要让应用做好发布准备,您需要配置、编译和测试应用的发布版本。配置任务相当简单,涉及完成代码清理和代码修改这两项基本任务,用于优化应用。编译流程与调试编译流程相似,可以使用 JDK 和 Android SDK 工具完成。测试任务就是做最终检查,以确保您的应用能在实际环境下正常运行。完成发布应用所需的准备工作之后,您将获得一个已签名的 APK 文件。您可以直接将该文件分发给用户,也可以通过 Google Play 等应用市场进行分发。

本文总结了您在准备应用以进行发布时需执行的几大任务。这些任务适用于所有 Android 应用,无论这些应用采用什么方式发布或分发给用户。如果您要通过 Google Play 发布应用,则还应查看 Google Play 发布核对清单

注意:在您执行本文所述任务之前,最好确保您的应用符合针对功能、性能和稳定性的所有发布标准。

显示准备流程如何与开发流程融为一体

图 1. 准备发布是一项必须完成的开发任务,也是发布流程中的第一步。

简介

为了向用户发布应用,您需要先创建准备好发布的软件包,以供用户在其 Android 设备上安装和运行。准备好发布的软件包与调试 APK 文件中包含的组件相同(经过编译的源代码、资源、清单文件等),使用的编译工具也相同。不过,与调试 APK 文件不同,准备好发布的 APK 文件已使用您自己的证书签名且使用 zipalign 工具进行了优化。

显示您在准备应用以进行发布时需要执行的五项任务

图 2. 您在准备应用以进行发布时需要执行五大任务。

如果您使用 Android Studio 编译您的应用,通常可以无缝地完成签名和优化任务。例如,您可以将 Android Studio 与 Gradle 编译文件搭配使用,一次性完成应用的编译、签名和优化任务。从命令行编译时,您也可以通过配置 Gradle 编译文件来实现相同目的。如需详细了解如何使用 Gradle 编译文件,请参阅编译系统指南。

要准备应用以进行发布,您通常需要执行五大任务(参见图 2)。每项大任务可能包含一项或多项小任务,视您的应用发布方式而定。例如,如果您要通过 Google Play 发布应用,那么在配置应用以进行发布时,可能需要向清单中添加特殊的过滤规则。同样,为了符合 Google Play 发布指南的相关要求,在收集发布材料时,您可能需要准备几张屏幕截图并撰写相关宣传文字。

在全面调试和测试您的应用后,您通常需要执行图 2 中列出的任务。Android SDK 中提供的几种工具可帮您测试和调试您的 Android 应用。有关详情,请参阅开发者指南中的调试测试这两部分。

收集材料和资源

要开始准备应用以进行发布,您需要收集几项支持性的信息,其中至少应包含用于为应用签名的加密密钥以及应用图标。此外,您可能还需要提供最终用户许可协议。

加密密钥

Android 系统要求安装的每个应用都必须使用应用开发者拥有的证书(即开发者用于存放私钥的证书)进行数字签名。Android 系统利用该证书来识别应用作者并在应用之间建立信任关系。您用于签名的的证书无需由证书授权机构签名;Android 系统允许您使用自签名证书为您的应用签名。要了解证书要求,请参阅为应用签名

重要提示:您的应用必须使用在 2033 年 10 月 22 日之后才会失效的加密密钥签名。

如果您的应用访问的服务或使用的第三方库要求您使用一个基于您的私钥的密钥,则您可能还必须获取其他发布密钥。

应用图标

请确保您有一个应用图标且该图标符合建议的图标指南的相关要求。应用的图标会显示在设备的主屏幕上和“启动器”窗口中,有助于用户识别您的应用。它还会显示在“管理应用”、“我的下载”等其他位置。此外,Google Play 等发布服务也会向用户显示您的应用图标。

注意:如果您要在 Google Play 上发布应用,则需要创建高分辨率版本的图标。有关详情,请参阅应用的图形资源

最终用户许可协议

请考虑为您的应用准备最终用户许可协议 (EULA)。最终用户许可协议可帮助保护您的员工、公司和知识产权,因此我们建议您为自己的应用提供一份。

其他材料

您可能还需要准备宣传和营销材料,用来宣传您的应用。例如,如果您要在 Google Play 上发布应用,则需要准备几段宣传文字并创建几张应用屏幕截图。有关详情,请参阅应用的图形资源

配置应用以进行发布

收集完所有支持材料后,您可以开始配置应用以进行发布。这部分总结了一些建议您在发布应用前对源代码、资源文件和应用清单进行的配置更改。虽然是否实现这里列出的大部分配置更改都由您决定,但这些都是良好的编码习惯,因此我们建议您实现这些更改。在某些情况下,您可能已在开发过程中实现了这些配置更改。

选择合适的软件包名称

请确保您选择的软件包名称适合在应用的整个生命周期中使用。将应用分发给用户后,您就无法再更改软件包名称。您可以在应用的清单文件中设置软件包名称。有关详情,请参阅介绍 package 属性的文档。

关闭日志记录和调试功能

在编译应用以进行发布之前,请务必禁用日志记录功能并停用调试选项。要禁用日志记录功能,您可以在源文件中移除对 Log 方法的调用。要停用调试功能,您可以从清单文件的 <application> 代码中移除 android:debuggable 属性,或在清单文件中将 android:debuggable 属性设为 false。此外,请移除在您的项目中创建的所有日志文件或静态测试文件。

此外,您还应移除之前添加到代码中的所有 Debug 跟踪调用,如 startMethodTracing()stopMethodTracing() 方法调用。

重要提示:调试功能允许用户使用 Chrome DevTools 注入脚本和提取内容,因此如果您使用 WebView 展示付费内容或使用 JavaScript 界面,请确保停用应用的调试功能。要停用调试功能,请使用 WebView.setWebContentsDebuggingEnabled() 方法。

清理项目目录

请清理您的项目,确保其符合 Android 项目中所述的目录结构。项目中留有散乱或孤立的文件会妨碍对应用的编译,而且会导致应用行为异常。您至少应执行以下清理任务:

  • 查看 jni/lib/src/ 目录的内容。jni/ 目录应只包含与 Android NDK 相关联的源文件,如 .c.cpp.h.mk 文件。lib/ 目录应只包含第三方库文件或专用库文件,包括预编译的共享库和静态库(例如 .so 文件)。src/ 目录应只包含应用的源文件(.java.aidl 文件)。src/ 目录不应包含任何 .jar 文件。
  • 检查项目中是否包含应用不使用的专用或专有数据文件,如果有,请将其移除。例如,在项目的 res/ 目录中查找旧的可绘制对象文件、布局文件和值文件,如果您不再使用这些文件,请将其删除。
  • 检查 lib/ 目录中是否包含测试库;如果您的应用不再使用这些库,请将其移除。
  • 查看 assets/ 目录和 res/raw/ 目录的内容,查找其中是否包含需在应用发布前更新或移除的原始资源文件和静态文件。

查看并更新您的清单和 Gradle 编译设置

验证是否已正确设置以下清单和编译文件项:

  • <uses-permission> 元素

    您应该只指定应用必需的相关权限。

  • android:iconandroid:label 属性

    您必须为这些属性(位于 <application> 元素中)指定值。

  • android:versionCodeandroid:versionName 属性。

    我们建议您为这些属性(位于 <manifest> 元素中)指定值。有关详情,请参阅对您的应用进行版本控制

如果您要在 Google Play 上发布应用,还可以设置另外几个清单或编译文件元素。例如,android:minSdkVersionandroid:targetSdkVersion 属性(位于 <uses-sdk> 元素中)。如需详细了解这些设置以及其他 Google Play 设置,请参阅 Google Play 上的过滤器

解决兼容性问题

Android 提供了多种工具和技术,可让您的应用与各种设备兼容。为了使您的应用可供尽可能多的用户使用,不妨考虑执行以下操作:

  • 添加对多种屏幕配置的支持

    确保您遵循支持多种屏幕的最佳做法。通过支持多种屏幕配置,您创建的应用可在 Android 支持的任何屏幕尺寸的设备上正常运行且拥有精美外观。

  • 针对 Android 平板电脑设备优化您的应用

    如果您的应用是专为运行低于 Android 3.0 的设备打造的,请遵循针对 Android 3.0 优化应用中所述的指南和最佳做法,这样您的应用就能与运行 Android 3.0 的设备兼容。

  • 考虑使用支持库

    如果您的应用是专为运行 Android 3.x 的设备打造的,请向您的应用项目中添加支持库,这样您的应用就能与较低版本的 Android 系统兼容。您可以将“支持库”提供的静态支持库添加到您的 Android 应用,以便使用较低版本的平台上未提供的 API 或使用不属于框架 API 的实用程序 API。

更新服务器和服务的网址

如果您的应用需要访问远程服务器或服务,请确保您使用的是该服务器或服务的生产网址或路径,而非测试网址或路径。

实现许可服务(如果您要在 Google Play 上发布应用)

如果您要通过 Google Play 发布付费应用,不妨考虑添加对 Google Play 许可服务的支持。借助这项许可服务,您可以根据当前用户的购买情况控制其对您应用的访问权限。使用 Google Play 许可服务并不是强制的,即使您通过 Google Play 发布应用也可以不使用这项服务。

如需详细了解 Google Play 许可服务以及如何在应用中使用该服务,请参阅应用许可

编译应用以进行发布

配置好应用后,您可以将其编译成一个经过签名和优化的准备好发布的 APK 文件。JDK 中包含用于为 APK 文件签名的工具(Keytool 和 Jarsigner);Android SDK 中包含用于编译和优化 APK 文件的工具。如果您使用的是 Android Studio 或是从命令行使用 Gradle 编译系统,则可以自动执行整个编译流程。如需详细了解如何配置 Gradle 编译,请参阅配置 Gradle 编译

使用 Android Studio 进行编译

您可以使用与 Android Studio 集成的 Gradle 编译系统来编译已使用您的私钥进行签名且已优化的准备好发布的 APK 文件。要了解如何在 Android Studio 中设置和运行编译,请参阅在 Android Studio 中编译和运行

编译流程假设您有适合为应用签名的证书和私钥。如果您没有合适的证书和私钥,Android Studio 可帮您生成一个。如需详细了解签名流程,请参阅为应用签名

准备外部服务器和资源

如果您的应用依赖于远程服务器,请确保该服务器是安全的且已经过配置,随时可投入实际使用。如果您要在应用中实现应用内购买结算而且要在远程服务器上执行签名验证步骤,这一点尤为重要。

此外,如果您的应用从远程服务器或实时服务(如内容 Feed)获取内容,请确保您提供的内容是最新的且随时可投入实际使用。

测试应用以进行发布

测试应用的发布版本有助于确保您的应用能在实际设备上和实际网络条件下正常运行。理想情况下,您至少应在一部手机设备上和一台平板电脑上测试您的应用,以验证界面元素的尺寸是否合适,以及应用的性能和电池能效是否可接受。

在测试之前,请先参阅测试内容。这篇文章总结了您在测试 Android 应用时应注意的常见情况。当您完成测试并确定应用的发布版本能正常运行后,就可以向用户发布您的应用了。有关详情,请参阅向用户发布应用。如果您要在 Google Play 上发布应用,请参阅 Google Play 发布核对清单