您可以通过将其包含在 Android 应用包 中来创建 Google Play 即时体验。此类捆绑包称为支持即时体验的应用包。本文档向您展示如何为支持即时体验的应用包设置开发环境,以及如何配置、构建、测试和发布支持即时体验的应用包。
如果您有一个使用已弃用的功能插件(com.android.feature
)的现有即时应用项目,请了解如何迁移您的即时应用以支持 Android 应用包。
设置开发环境
要在应用包中提供即时体验,您需要访问 Google Play 即时体验开发 SDK。您可以使用以下方法之一安装 SDK
- 安装 Android Studio 3.6 或更高版本。打开 Android Studio 后,从SDK 管理器中的“SDK 工具”选项卡下载 Google Play 即时体验开发 SDK。
从命令行安装
cd path/to/android/sdk/tools/bin && \ ./sdkmanager 'extras;google;instantapps'
此外,如果您想在本地测试您的即时体验,请访问物理或虚拟设备。
了解所需的执行条件
为了增强安全性,Google Play 即时体验在一种特殊的 SELinux 沙箱中运行支持即时体验的应用包。此沙箱允许使用一部分权限,以及与其他应用进行有限类型的交互。以下部分更详细地解释了此沙箱的特性。
支持的权限和操作
支持即时体验的应用包只能使用以下列表中的权限
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ACCESS_NETWORK_STATE
BILLING
– 自Play 结算库 1.0起已弃用。CAMERA
INSTANT_APP_FOREGROUND_SERVICE
– 仅在 Android 8.0(API 级别 26)及更高版本中。INTERNET
READ_PHONE_NUMBERS
– 仅在 Android 8.0(API 级别 26)及更高版本中。RECORD_AUDIO
VIBRATE
WAKE_LOCK
处理常见的不受支持的权限
以下是您必须从应用中删除的常用、不受支持的权限列表,以及每个权限的推荐迁移路径。
ACCESS_WIFI_STATE
:使用ACCESS_NETWORK_STATE
,它应该提供与ACCESS_WIFI_STATE
类似的信息。BILLING
:这是一个已弃用的权限。使用 Google Play 结算库,它不再需要com.android.vending.BILLING
权限。READ/WRITE_EXTERNAL_STORAGE
:即时应用无法访问外部存储;请改用内部存储。com.google.android.c2dm.permission.RECEIVE
和permission.C2D_MESSAGE
:C2DM 已弃用。迁移到 Firebase Cloud Messaging (FCM)。FCM 无需任何其他权限即可工作。
此外,支持即时体验的应用包无法执行以下操作
访问已安装的应用
在开发即时体验时,请记住,它无法与设备上已安装的应用交互,除非以下情况之一为真
- 已安装应用中的一个或多个活动将其
android:visibleToInstantApps
元素设置为true
– 此元素适用于运行 Android 8.0(API 级别 26)或更高版本的应用。 - 已安装应用包含一个意图过滤器,其中包含
CATEGORY_BROWSABLE
。 - 即时体验正在使用
ACTION_SEND
、ACTION_SENDTO
或ACTION_SEND_MULTIPLE
操作发送意图。
配置您的项目以支持即时体验
为了与 Google Play 即时体验兼容,您必须仔细配置支持即时体验的应用包的几个方面。以下部分介绍了这些注意事项。
声明项目依赖项
要在应用中使用 Google Play 即时体验 API,请在应用模块的 build.gradle
配置文件中包含以下声明
Groovy
implementation "com.google.android.gms:play-services-instantapps:17.0.0"
Kotlin
implementation("com.google.android.gms:play-services-instantapps:17.0.0")
定义正确的版本代码
应用即时体验的版本代码需要小于可安装应用的版本代码。预期用户会从 Google Play 即时体验过渡到下载并将应用安装到其设备上。Android 框架将此过渡视为应用更新。
为了确保您遵循用户期望的版本控制方案,请遵循以下策略之一
- 将 Google Play 即时体验的版本代码重新开始为 1。
- 将可安装 APK 的版本代码增加一个较大的数字,例如 1000,以确保有足够的可用空间供即时体验的版本号增加。
在两个单独的 Android Studio 项目中开发即时应用和可安装应用是可以的。但是,如果您这样做,则必须执行以下操作才能在 Google Play 上发布您的应用
- 在两个 Android Studio 项目中使用相同的包名。
- 在 Google Play 控制台中,将两个变体上传到同一个应用。
有关设置应用版本的更多详细信息,请参阅 版本控制应用。
更新目标沙盒版本
您的即时应用的 AndroidManifest.xml
文件需要更新为针对 Google Play 即时体验支持的沙盒环境。您可以通过将 android:targetSandboxVersion
属性添加到应用的 <manifest>
元素来完成此更新,如下面的代码片段所示
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
...
android:targetSandboxVersion="2" ...>
有关更多信息,请参阅有关 targetSandboxVersion
属性的文档。
声明支持即时体验的应用模块
您可以使用以下方法之一声明您的应用包支持即时体验
如果您有一个现有的应用包,其中仅包含 基本模块,则可以按如下方式启用应用包的即时体验
- 通过从菜单栏中选择查看 > 工具窗口 > 项目打开项目面板。
- 右键单击您的基本模块(通常名为“app”),然后选择重构 > 启用即时应用支持。
- 在出现的对话框中,从下拉菜单中选择您的基本模块。
- 单击确定。
Android Studio 会将以下声明添加到模块的清单中
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution"> <dist:module dist:instant="true" /> ... </manifest>
如果您有一个现有的应用包,其中包含多个模块,则可以 创建支持即时体验的功能模块。此过程还会启用应用基本模块的即时体验,从而使您可以 支持应用中的多个即时入口点。
添加对登录的支持
如果您的即时体验允许用户登录,则支持即时体验的应用包必须 支持 Android 上的密码智能锁。如果您正在构建 “即时游戏”,则应改为使用 Google Play 游戏服务 登录。
支持执行环境
为了与即时体验运行的 SELinux 沙盒兼容,在创建支持即时体验的应用包时,请记住以下事项
- 不要共享
myUid()
的值,它是应用进程的内核分配的 UID。 - 如果您的应用的目标是 Android 8.1(API 级别 27)或更低版本,请创建一个 网络安全配置 文件,并将
cleartextTrafficPermitted
设置为false
。即时体验不支持 HTTP 流量。对于以 Android 9 或更高版本为目标的应用,默认情况下禁用明文流量。 即时体验将保留在用户的设备上,直到即时体验缓存被清除,这种情况会在以下情况之一发生时发生
- 由于设备可用内存不足,即时体验缓存被垃圾回收。
- 用户重新启动设备。
如果发生上述任一过程,则用户必须重新下载您的即时体验才能与其交互。
如果系统存储空间非常少,则即时体验的用户数据可能会从内部存储中删除。因此,建议定期将用户数据与应用服务器同步,以便保留用户进度。
添加即时体验工作流的逻辑
配置应用包以支持即时体验后,请添加以下部分所示的逻辑。
检查应用是否正在运行即时体验
如果应用的一些逻辑取决于用户是否参与了您的即时体验,请调用 isInstantApp()
方法。如果当前正在运行的进程是即时体验,则此方法返回 true
。
显示安装提示
如果您正在构建应用或游戏的试用版,则 Google Play 即时体验允许您在即时体验中显示一个提示,邀请用户将其设备上安装完整体验。要显示此提示,请使用 InstantApps.showInstallPrompt()
方法,如下面的代码片段所示
Kotlin
class MyInstantExperienceActivity : AppCompatActivity { // ... private fun showInstallPrompt() { val postInstall = Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_DEFAULT) .setPackage(your-installed-experience-package-name) // The request code is passed to startActivityForResult(). InstantApps.showInstallPrompt(this@MyInstantExperienceActivity, postInstall, request-code, /* referrer= */ null) } }
Java
public class MyInstantExperienceActivity extends AppCompatActivity { // ... private void showInstallPrompt() { Intent postInstall = new Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_DEFAULT) .setPackage(your-installed-experience-package-name); // The request code is passed to startActivityForResult(). InstantApps.showInstallPrompt(MyInstantExperienceActivity.this, postInstall, request-code, /* referrer= */ null); } }
将数据传输到已安装的体验
如果用户喜欢您的即时体验,他们可能会决定安装您的应用。为了提供良好的用户体验,用户数据必须从即时体验传输到应用的完整版本。
如果用户使用的是运行 Android 8.0(API 级别 26)或更高版本的设备,并且如果您的应用 指定了 targetSandboxVersion
为 2
,则用户数据会自动传输到应用的完整版本。否则,您必须手动传输数据。为此,请使用以下 API 之一
- 对于使用运行 Android 8.0(API 级别 26)或更高版本的设备的用户,请使用 Cookie API - 示例应用
- 如果用户可以在运行 Android 7.1(API 级别 25)或更低版本的设备上与您的体验进行交互,请添加对存储 API 的支持 - 示例应用
构建应用包
您可以使用 Android Studio 或命令行界面来构建支持即时体验的应用包。
Android Studio
使用 Android Studio,您可以通过选择构建 > 构建 Bundle/APK > 构建 Bundle来构建应用包。有关构建项目的更多信息,请参阅 构建项目。
命令行界面
您还可以使用 Gradle 从命令行构建应用包。
支持 64 位架构
在 Google Play 上发布的应用需要支持 64 位架构。添加应用的 64 位版本可以提高性能,并为仅支持 64 位硬件的设备做好准备。详细了解 64 位支持。
测试即时体验
在发布支持即时体验的应用包之前,您可以从以下位置之一测试即时体验以验证功能
- 使用 Android Studio 安装到本地设备上。
- 使用 命令行界面 安装到本地设备上。
- 发布到 Google Play 控制台上的 内部测试轨道。
Android Studio
要在本地计算机上使用 Android Studio 测试应用的即时体验,请完成以下步骤
- 如果您的测试设备上安装了应用版本,请将其卸载。
- 在 Android Studio 中,从 运行/调试配置对话框的常规选项卡上显示的安装选项中,启用作为即时应用部署复选框。
- 选择菜单栏中的运行 > 运行,或单击工具栏中的运行 ,然后选择要测试应用即时体验的设备。应用的即时体验将在您选择的测试设备上加载。
命令行界面
要使用命令行在本地机器上测试应用的即时体验,请完成以下步骤
- 如果您的测试设备上安装了应用版本,请将其卸载。
- 通过输入以下命令,将您的即时应用侧载并运行到您的测试设备上
ia run output-from-build-command
内部测试轨道
要从 Play 商店或您网站上的横幅测试应用的即时体验,请将应用发布到 Play Console 上的内部测试轨道。
要将您的应用发布到内部测试轨道,请完成以下步骤
- 按照将应用包上传到 Play Console指南中的步骤上传您的应用包。
- 为内部测试轨道准备已上传的应用包以进行发布。有关更多信息,请参阅有关如何准备和推出版本的支持文章。
在设备上登录内部测试人员帐户,然后从以下任一界面启动您的即时体验
- 应用 Play 商店列表中的“立即试用”按钮。
- 应用网站横幅上的链接。
将应用包发布到生产轨道
要发布您启用了即时的应用包,请完成以下步骤
- 如果您尚未执行,请使用发布密钥对您的应用包进行签名并将应用包上传到 Play Console。
- 在 Play Console 中,打开版本管理 > Android 即时应用,然后导航到即时应用生产轨道。
- 选择从库更新,然后选择您已上传的启用了即时的应用包。
选择发布即时体验的位置
可以在用户可以安装应用的一部分国家/地区和区域中启动应用的即时体验。如果您希望将应用的即时体验推广给居住在特定国家/地区和区域的用户,此功能非常有用。
其他资源
要了解有关创建即时体验和 Android 应用包的更多信息,请参阅以下资源
- 视频:将应用捆绑到即时体验
- 在本届 Android Dev Summit '18 的研讨会上,了解如何将即时体验添加到 Android 应用包中。
- 视频:使用 Android 应用包发布更小的应用
- 了解应用包如何帮助您更快地开发应用并为用户创建更小的 APK。
- Codelab:您的第一个 Android 应用包
- 创建 Android 应用包并向其中添加功能的分步指南。
- Android 应用包格式
- 详细了解
bundletool
命令行程序如何根据应用的代码和资源组织应用包。