创建使用功能插件的免安装应用

注意:本页上的工作流程仅适用于使用 Android Studio 3.1 创建免安装应用的开发者。

强烈建议您改用 Android Studio 3.3 或更高版本来创建支持免安装的 app bundle

本指南指导您如何为处理免安装应用设置相应的开发环境。接下来,您将学习如何从项目创建向导或从现有应用创建免安装应用。然后,您将学习如何运行和调试含有免安装应用的 Android Studio 项目。最后,指南中将提供有关发布免安装应用的资源。

如果您还没有下载,请先下载 Android Studio 3.0 或更高版本,然后执行本指南中的步骤。

准备开发环境

在 Android Studio 中,打开 Android SDK Manager。在 SDK Platforms 标签中,确保已安装了 Android 6.0(API 级别 23)或更高版本。

然后,打开 SDK Tools 标签,安装以下软件包:

  • Android SDK Build-Tools 26.x 或更高版本
  • Android SDK Platform Tools 25.x 或更高版本
  • Android SDK Tools(最新版本)
  • Google Play Instant Development SDK(最新版本)
  • Support Repository(最新版本)
    • Support Repository 的所有依赖关系(各自的最新版本)

仅请求支持的权限

免安装应用只能使用通过 Android App Bundle 使现有应用支持免安装指南中的列表中包含的权限。 LX: guide to Make your existing app instant-enabled using Android App Bundle,这部分的翻译,我把这个to理解成修饰guide了,不是很确定,麻烦帮忙proof一下

创建免安装应用

您可以利用以下一种工作流程来创建免安装应用:

创建新的免安装应用项目

要创建免安装应用,请完成下列步骤:

  1. 启动 Android Studio 并创建一个新项目:
    • 如果您还没有打开项目,请在 Welcome to Android Studio 窗口中点击 Start a new Android Studio project
    • 如果已打开了项目,请选择 File > New Project
  2. Create Android Project 窗口中,执行以下操作:
    1. Application name 框中,输入“My First Instant App”。
    2. Company domain 框中,输入“example.com”。
    3. Package name 保留为“com.example.myfirstinstantapp”。
    4. 点击 Next
  3. Target Android Devices 窗口中,执行以下操作:
    1. 确保选择 Phone and Tablet
    2. Minimum SDK 列表下,选中 Include Android Instant app support。点击 Next
  4. Customize Instant App Support 窗口中,保留默认设置。点击 Next
  5. Add an Activity to Mobile 窗口中,选择 Empty Activity。点击 Next
  6. Configure Activity 窗口中,执行以下操作:
    • Instant App URL Host 框中,输入“myfirstinstantapp.example.com”(不包括引号)。
    • Instant App URL route 框中,输入“/hello”(不包括引号)。
    • 其他设置保留默认值。
    • 点击 Finish

Android Studio 将构建并加载新项目的文件。

模块化处理现有应用

本节介绍如何将现有的单体式应用转换为模块化应用,以及如何向新的模块化应用添加支持免安装的功能。

创建基本功能模块和 APK 模块

要创建免安装应用,首先需要创建以下模块:

  • 基本功能模块,即捆绑到您创建的每个免安装应用中的功能模块。这与 Android App Bundle 的基本模块不同,后者同时包含免安装应用体验和初始安装应用体验。
  • 最小模块,仅包含构建应用的 APK 文件时必需的共享代码。

完成以上流程后,应用的构建过程将与应用的逻辑分开,因而能够将基于逻辑的模块的一部分转换为免安装应用。

将应用指定为基本功能模块

在创建应用时,它会自动包含一个名为“app”的模块。本节介绍如何将应用的逻辑声明为基本功能模块的一部分。

要将应用的逻辑移动到基本功能模块中,请完成以下步骤:

  1. 将您的模块重命名为 base 之类的名称。
  2. 更新应用资源的导入声明,以便它们引用新命名的模块。
  3. 打开模块的 base/build.gradle 文件,并通过以下更改将模块指定为功能模块:

    base/build.gradle

        // Replace
        // apply plugin: 'com.android.application'
        // with
        apply plugin: 'com.android.feature'
  4. 此模块代表应用的基本功能模块,因此请通过将 baseFeature 标记设置为 true,将该模块标记为基本功能模块:

    base/build.gradle

        android {
            ...
            baseFeature true
            ...
        }

    注意:如果应用中只有一个功能模块,则必须将该模块指定为基本功能模块。

创建最小 APK 模块

除了创建基本功能模块外,您还需要创建最小模块。此模块包含构建应用的 APK 文件时所需的共享代码。

要创建最小模块,请完成以下步骤:

  1. 依次选择 File > New > New Module...
  2. 在出现的 Create New Module 对话框中,选择 Phone & Tablet Module。点击 Next
  3. Phone & Tablet Module 窗口中,选择模块名称和软件包名称。本指南使用 apk 作为模块名称。

    点击 Next

  4. Add an Activity to Mobile 窗口中,选择 Add No Activity。点击 Finish

Android Studio 完成创建最小模块,并将其加载到项目窗口中。

将最小模块与功能模块关联起来

您已创建了功能模块,但只有将其与应用的最小模块关联后,Android Studio 才会将它包含到应用的 APK 文件中。要执行关联,请完成以下步骤:

  1. 由于您必须在声明 com.android.application 的 Gradle 模块中声明应用 ID,因此请将功能模块中的 applicationID 行移动到最小模块中。

    要移动该行,请按照以下代码段中的说明进行操作。

    base/build.gradle

        android {
           defaultConfig {
               // Remove this line
               // applicationId "com.mycompany.example"
               ...
           }
           ...
        }
    
        dependencies {
              // Add this line to declare this module's dependency
              // on the minimal module
              application project(":apk")
        }

    apk/build.gradle

        android {
            ...
            defaultConfig {
                // replace
                // applicationId "com.mycompany.example.apk"
                // with
                applicationId "com.mycompany.example"
                ...
            }
            ...
        }
  2. 最小模块需要依赖于应用的每个功能模块。为此,请按照以下代码段中所示更新构建依赖关系:

    apk/build.gradle

        dependencies {
            implementation project(':base')
            // If your app contains feature modules other than the base feature module,
            // add dependency lines that are similar to the following:
            // implementation project(':feature1')
            // implementation project(':feature2')
        }
  3. 在基本功能模块中,更新 AndroidManifest.xml 文件,使其包含以下内容:

    base/src/main/AndroidManifest.xml

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  package="com.mycompany.example">
        ...
        </manifest>
  4. 应用的每个清单文件必须引用一个单独的软件包,因此请按照以下方式更新 APK 的 AndroidManifest.xml 中的名称:

    apk/src/main/AndroidManifest.xml

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                  package="com.mycompany.example.app">
        </manifest>

创建更多支持 Google Play 免安装体验的功能模块

有了功能模块,您的应用更新起来会更加方便。而且这些模块还能让您更加轻松地创建免安装应用。在使用免安装应用时,用户无需安装您的应用,只需点击链接就可以访问特定功能模块中的功能。

如果您从头开始创建功能模块,您可以随时添加支持 Google Play 免安装体验的功能。

要创建支持 Google Play 免安装体验的新功能模块,请完成以下步骤:

  1. 在 Android Studio 中,依次选择 File > New > New Module...
  2. 在出现的 Create New Module 窗口中,选择 Instant App。点击 Next
  3. 为新功能模块指定一个名称。本指南将它命名为“instant”。点击 Finish

Android Studio 完成创建和编译新的免安装应用功能模块。

验证基本功能模块依赖

确保功能模块中包含对应用的基本功能模块的依赖:

instant/build.gradle

dependencies {
        implementation project(':base')
    }
    

启用“立即体验”功能

图 1 为免安装应用显示的“立即体验”按钮

Google Play 免安装体验允许您将免安装应用分发给用户,而不需要他们点击 URL。这种体验(称为“立即体验”)在 Play 商店中提供,如图 1 中所示。

要在您的应用中提供此功能,您有两种选择:

  1. 将您的默认 Activity 保留为“立即体验”体验的入口点。
  2. 添加各 Activity 的 URL,并声明一个默认的 URL,它将成为“立即体验”体验的入口点。
使用默认 Activity

包含以下 Intent 过滤器的 Activity 将成为入口点:

<activity android:name="com.example...MainActivity" ... >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    
创建默认 URL

如果您为免安装应用提供 URL 访问,您必须包含一个默认 URL。当用户在 Google Play 商店中点击立即体验或将免安装应用固定到启动器时,便会调用该 URL。通常,默认 URL 与应用的主 Activity 对应。主 Activity 可在应用的基本功能模块中找到。

要添加默认 URL,请在包含应用的主 Activity 的应用模块中添加 <meta-data> 属性,如以下代码段中所示:

base/manifests/AndroidManifest.xml

<activity android:name="com.example.base.MainActivity" ... >
        <meta-data android:name="default-url"
                   android:value="https://example.com/welcome" />
    </activity>
    

为免安装应用提供 URL 访问

如果您希望用户能够在 Play 商店以外的位置(例如在应用网站的横幅中)打开您的免安装应用,请完成以下任务之一:

  • 使用 Launch API:

    https://play.google.com/store/apps/details?id=package_name&launch=true
  • 为应用添加应用链接。每个应用链接都是您所拥有的一个特定的 URL,点击该 URL 可加载免安装应用中的特定 Activity。

将域名与应用关联起来

URL Mapping Editor 可帮助您将应用链接与充当免安装应用入口点的对应 Activity 关联起来。要了解详情,请参阅验证 Android 应用链接

确保应用链接显示在用户点击链接时所启动的功能模块的清单文件中。以下示例中包含一个名为“survey”的功能模块的链接:

survey/manifests/AndroidManifest.xml

<activity android:name="com.example.survey_module.SurveyActivity" ... >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="http"
                android:host="example.com"
                android:pathPrefix="/survey" />
        </intent-filter>
    </activity>
    

如果在完成这些步骤后,浏览器试图去加载 URL 而不是您的免安装应用,请通过运行以下命令清除您的 DevMan 数据库:

$ adb shell pm clear com.google.android.instantapps.devman
    

直接将用户传送到您的免安装应用

您可以在用户点击应用链接时直接将他们传送到您的应用。要实现此功能,需要执行以下步骤来提供应用链接验证:

  1. 声明网站与您的免安装应用的关联
  2. 为对应于应用链接的每个 <intent-filter> 元素添加自动验证功能:

    survey/manifests/AndroidManifest.xml

        <activity android:name="com.example.survey.SurveyActivity" ... >
             <intent-filter android:autoVerify="true">
                 ...
             </intent-filter>
        </activity>

如果您为免安装应用创建了应用链接,则可以通过以下方式之一加载不同的功能模块:

  • 调用加载与该功能模块关联的 URL 的 Intent。
  • 使用 Play 核心库

运行您的免安装应用

您可以将免安装应用部署到运行 Android 5.1(API 级别 21)或更高版本的大多数设备上。如果您没有测试设备,请参阅以下小节,了解如何设置模拟器以运行免安装应用。

要在 Android Studio 中运行项目,请执行以下操作:

  1. 依次点击 View > Tool Windows > Project 以打开 Project 窗口,然后选择 Run > Run 'instantapp'
  2. Select Deployment Target 窗口中,选择您要在上面运行应用的目标设备。

Android Studio 会构建您的应用,然后将其安装到测试设备或模拟器上:

设置支持免安装应用的模拟器

要设置用于运行免安装应用的模拟器,请完成以下步骤:

  1. 创建 Android 虚拟设备。要使用与免安装应用相关的所有最新功能,请对设备进行配置,使其运行 Android 8.1(API 级别 27)或更高版本,采用 x86 架构,并包含 Google API。

  2. 启动模拟器,并登录 Google 测试帐户。

  3. 在系统的“设置”菜单中,前往 Google > 免安装应用,选择“Android 免安装应用”。

部署免安装应用以进行发布

要准备免安装应用进行发布,请完成以下步骤:

  1. 在 Android Studio 中,依次选择 Build > Generate Signed APK...
  2. Generate Signed APK 窗口中,选择 instantapp 模块。点击 Next
  3. 完成分发免安装应用这篇文章中介绍的步骤。
  4. 导航到 Google Play 管理中心,完成准备工作及发布版本这篇文章中介绍的工作流程。确保上传您的免安装应用 APK。

要详细了解如何在 Google Play 管理中心准备并发布您的应用,请参阅为 APK 签名

其他资源

要详细了解 Google Play 免安装体验,请参阅以下额外资源:

Codelab:打造您的第一款免安装应用
在现有应用中添加对 Google Play 免安装体验的支持。
Codelab:构建多功能免安装应用
模块化处理多功能应用。