创建支持即时体验的应用包

您可以通过将其包含在 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_WIFI_STATE:使用 ACCESS_NETWORK_STATE,它应该提供与 ACCESS_WIFI_STATE 类似的信息。
  • BILLING:这是一个已弃用的权限。使用 Google Play 结算库,它不再需要 com.android.vending.BILLING 权限。
  • READ/WRITE_EXTERNAL_STORAGE:即时应用无法访问外部存储;请改用内部存储。
  • com.google.android.c2dm.permission.RECEIVEpermission.C2D_MESSAGE:C2DM 已弃用。迁移到 Firebase Cloud Messaging (FCM)。FCM 无需任何其他权限即可工作。

此外,支持即时体验的应用包无法执行以下操作

访问已安装的应用

在开发即时体验时,请记住,它无法与设备上已安装的应用交互,除非以下情况之一为真

  • 已安装应用中的一个或多个活动将其 android:visibleToInstantApps 元素设置为 true此元素适用于运行 Android 8.0(API 级别 26)或更高版本的应用。
  • 已安装应用包含一个意图过滤器,其中包含 CATEGORY_BROWSABLE
  • 即时体验正在使用 ACTION_SENDACTION_SENDTOACTION_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 上发布您的应用

  1. 在两个 Android Studio 项目中使用相同的包名。
  2. 在 Google Play 控制台中,将两个变体上传到同一个应用。

有关设置应用版本的更多详细信息,请参阅 版本控制应用

更新目标沙盒版本

您的即时应用的 AndroidManifest.xml 文件需要更新为针对 Google Play 即时体验支持的沙盒环境。您可以通过将 android:targetSandboxVersion 属性添加到应用的 <manifest> 元素来完成此更新,如下面的代码片段所示

<manifest
   xmlns:android="http://schemas.android.com/apk/res/android"
  ...
   android:targetSandboxVersion="2" ...>

有关更多信息,请参阅有关 targetSandboxVersion 属性的文档。

声明支持即时体验的应用模块

您可以使用以下方法之一声明您的应用包支持即时体验

  • 如果您有一个现有的应用包,其中仅包含 基本模块,则可以按如下方式启用应用包的即时体验

    1. 通过从菜单栏中选择查看 > 工具窗口 > 项目打开项目面板。
    2. 右键单击您的基本模块(通常名为“app”),然后选择重构 > 启用即时应用支持
    3. 在出现的对话框中,从下拉菜单中选择您的基本模块。
    4. 单击确定

    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)或更高版本的设备,并且如果您的应用 指定了 targetSandboxVersion2,则用户数据会自动传输到应用的完整版本。否则,您必须手动传输数据。为此,请使用以下 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

要在本地计算机上使用 Android Studio 测试应用的即时体验,请完成以下步骤

  1. 如果您的测试设备上安装了应用版本,请将其卸载。
  2. 在 Android Studio 中,从 运行/调试配置对话框常规选项卡上显示的安装选项中,启用作为即时应用部署复选框。
  3. 选择菜单栏中的运行 > 运行,或单击工具栏中的运行 ,然后选择要测试应用即时体验的设备。应用的即时体验将在您选择的测试设备上加载。

命令行界面

要使用命令行在本地机器上测试应用的即时体验,请完成以下步骤

  1. 如果您的测试设备上安装了应用版本,请将其卸载。
  2. 通过输入以下命令,将您的即时应用侧载并运行到您的测试设备上
ia run output-from-build-command

内部测试轨道

要从 Play 商店或您网站上的横幅测试应用的即时体验,请将应用发布到 Play Console 上的内部测试轨道

要将您的应用发布到内部测试轨道,请完成以下步骤

  1. 按照将应用包上传到 Play Console指南中的步骤上传您的应用包。
  2. 为内部测试轨道准备已上传的应用包以进行发布。有关更多信息,请参阅有关如何准备和推出版本的支持文章。
  3. 在设备上登录内部测试人员帐户,然后从以下任一界面启动您的即时体验

    • 应用 Play 商店列表中的“立即试用”按钮。
    • 应用网站横幅上的链接。

将应用包发布到生产轨道

要发布您启用了即时的应用包,请完成以下步骤

  1. 如果您尚未执行,请使用发布密钥对您的应用包进行签名将应用包上传到 Play Console
  2. 在 Play Console 中,打开版本管理 > Android 即时应用,然后导航到即时应用生产轨道。
  3. 选择从库更新,然后选择您已上传的启用了即时的应用包。

选择发布即时体验的位置

可以在用户可以安装应用的一部分国家/地区和区域中启动应用的即时体验。如果您希望将应用的即时体验推广给居住在特定国家/地区和区域的用户,此功能非常有用。

其他资源

要了解有关创建即时体验和 Android 应用包的更多信息,请参阅以下资源

视频:将应用捆绑到即时体验
在本届 Android Dev Summit '18 的研讨会上,了解如何将即时体验添加到 Android 应用包中。
视频:使用 Android 应用包发布更小的应用
了解应用包如何帮助您更快地开发应用并为用户创建更小的 APK。
Codelab:您的第一个 Android 应用包
创建 Android 应用包并向其中添加功能的分步指南。
Android 应用包格式
详细了解bundletool 命令行程序如何根据应用的代码和资源组织应用包。