您可以通过将其包含在 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 控制台上的内部测试轨道。
要将应用发布到内部测试轨道,请完成以下步骤。
- 按照将应用包上传到 Play 控制台指南中的步骤上传应用包。
- 准备上传的 Bundle 以发布到内部测试轨道。有关更多信息,请参阅有关如何准备和推出版本的支持文章。
在设备上登录内部测试人员帐户,然后从以下界面之一启动即时体验。
- 应用的 Play 商店列表中的立即试用按钮。
- 应用网站上的横幅中的链接。
将应用包发布到生产轨道
要发布您启用了即时功能的应用包,请完成以下步骤
- 如果您尚未完成,请使用发布密钥签署您的应用包,并将应用包上传到 Play Console。
- 在 Play Console 中,打开发布管理 > Android 即时应用,然后导航到即时应用生产轨道。
- 选择从库更新,然后选择您已上传的启用了即时功能的应用包。
选择发布即时体验的位置
您可以选择在可以安装您的应用的部分国家/地区和区域中启动应用的即时体验。当您希望将应用的即时体验推广给特定国家/地区和区域的用户时,此功能非常有用。
其他资源
要了解有关创建即时体验和 Android 应用包的更多信息,请参阅以下资源
- 视频:将应用捆绑到即时应用中
- 在本届 Android Dev Summit '18 会议中,了解如何将即时体验添加到 Android 应用包中。
- 视频:使用 Android 应用包发布更小的应用
- 了解应用包如何帮助您更快地开发应用并为用户创建更小的 APK。
- Codelab:您的第一个 Android 应用包
- 创建 Android 应用包并向其中添加功能的分步指南。
- Android 应用包格式
- 了解有关
bundletool
命令行程序如何根据应用的代码和资源组织应用包的更多信息。