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

您可以通过将其包含在 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 控制台上的内部测试轨道

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

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

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

将应用包发布到生产轨道

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

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

选择发布即时体验的位置

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

其他资源

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

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