Android免安装应用

概览

Android 免安装应用 使原生 Android 应用能够在启动网址时运行,无需安装应用。 当 Google Play 商店 收到与 免安装应用匹配的网址请求时,它将必需的代码文件发送到发送该请求的 Android 设备。 然后,该设备将运行此应用。

注:Android 免安装应用 仅在运行 Android 5.0(API 级别 21)或更高版本的 Android 设备上正常工作。

应用即功能

Android 免安装应用 为开发者构建应用和用户使用应用提供了一种新颖而独特的方式。 在介绍 Android 免安装应用 的核心概念之前,了解一些基本术语很有用处。

基本而言,应用至少有一项功能(即应用执行的操作):例如,查找地图上的位置、发送电子邮件或读取每日新闻。 许多应用都提供多种功能。 例如,除查找地图上的位置外,地图应用可能还允许用户查找附近的餐馆或通过电子邮件发送位置链接。

每一个此类操作(查找位置、查找附近的餐馆、分享位置链接)都是地图应用中的一项功能。

借助 Android 免安装应用,用户可以从 Google Play 商店 下载某个应用的某项功能,而无需下载和安装整个应用。 当用户从即搜即得应用请求一项功能时,他们仅收到运行该特定功能所必需的代码,不多也不少。 在用户使用完此功能后,系统可以丢弃该功能的代码。

回到前面的地图应用示例,该地图即搜即得应用可将其每项功能对外显示为该应用中的某个分散实体。

用户可以只下载和使用位置查找器功能,也可以只下载和使用餐馆指南功能或分享功能。 在用户切换到另一个应用后,系统可以安全地移除此功能的代码。

即搜即得应用中的每项功能应至少有一个可充当该功能入口点的 Activity 类。 入口点 Activity 可托管此功能的 UI,并定义整个用户流。 当用户在其设备上启动此功能时,他们首先看到的是入口点 Activity。 一项功能可以有多个入口点 Activity,但它只需要一个。

功能模块和功能APK(即特征模块和主模块,特征模块可以没有或者有多个,主模块必须有且只有一个)

要提供按需功能下载,您需要将应用分解成较小的模块,并将它们打包成功能模块。

在构建即搜即得应用项目时,构建输出是一个包含一个或多个功能 APK 的 免安装应用 APK。 每项功能 APK 都是从项目中的功能模块构建的,可以由用户按需下载,并且可以作为即搜即得应用进行启动。

每个即搜即得应用都必须有且仅有一个基础功能 APK。 如果您的即搜即得应用只有一项功能,那么,您只需要基础功能 APK;其他功能 APK 是可选的。如果您的即搜即得应用具有多项功能,则基础功能 APK 通常包含其他功能所依赖的共享资源和代码文件。 继续地图即搜即得应用示例,基础 APK 可能包含此地图应用的基础 styles.xml 文件或用于位置和景点建模的数据结构类。 无论用户请求哪项功能,均会下载基础功能 APK。

除基础功能 APK 外,您还可以有其他功能 APK。 其他功能 APK 可以包含与某项功能对应的应用片段。 功能 APK 包含针对该功能的入口点 Activity,以及该功能所需的任何独特资源。

当用户从即搜即得应用请求一项功能时,他们将获得两个功能 APK:所请求的功能 APK 和基础功能 APK。 如果同一个用户从该即搜即得应用请求另一项功能,他们可能只会收到该功能 APK,因为他们已下载基础功能 APK。 当然,如果即搜即得应用只有一项功能,因而只有一个基础功能 APK,则用户只会收到基础功能 APK。

下图描绘了免安装应用 APK 和功能 APK 之间的关系。

从 Google Play 商店 请求功能

要从 Google Play 商店 下载即搜即得应用的一项功能,用户只需点击一个链接。 当 Google Play 商店 收到针对某个即搜即得应用的请求时,它将解析网址以确定用户请求哪项功能。 在找到匹配的功能后,Google Play 商店 将与该功能对应的功能 APK 发送到用户设备,然后,免安装应用运行时启动该功能。 如果 Google Play 商店 无法找到匹配的功能,它将在设备上提醒 免安装应用运行时。 然后,免安装应用运行时将向系统发送一个广播 Intent 以便处理该网址。

因此,即搜即得应用中的每个入口点 Activity 都必须可寻址:它需要与一个唯一的网址对应。 如果免安装应用中各个功能的网址共享一个网域,则每项功能都需要与该网域中的一个不同路径对应。

继续上述地图即搜即得应用示例,该应用具有三项独立的功能:位置查找器、附近餐馆和共享位置。 这些功能共享一个网域,“example.com”。 要为每项功能提供一个唯一的网址,即搜即得应用须在每项功能的网域下面指定一个不同的路径。

功能	        网址
位置查找器	http://example.com/finder
附近餐馆	http://example.com/restaurants
共享位置	http://example.com/share
如前所述,一项功能可具有多个入口点 Activity。 例如,一项功能可能具有两个相互关联的 Activity,用户可在这两个 Activity 之间进行切换,其中每个 Activity 都有自己的网址。 功能清单需要为每个 Activity 指定一个路径,如果存在多个匹配,则为 Activity 指定一个优先级顺序。

例如,想象一下,地图即搜即得应用的位置查找器功能具有两个 Activity,一个搜索 Activity 和一个详情 Activity。 详情 Activity 的网址与搜索 Activity 的网址相似,区别在于详情 Activity 的网址后面还附加了一个数值 ID。

Activity	网址	                        网址路径        优先级
搜索	http://example.com/finder/	'/查找器/'	1
详情	http://example.com/finder/<ID>	'/查找器/*'	100
如果 Google Play 商店 收到针对网址“http://example.com/finder/1234”的请求,那么,它与搜索 Activity 和详情 Activity 都匹配。 Google Play 商店 需要从这两个 Activity 中选出一个 Activity 作为该功能的起点。 由于此即搜即得应用规定详情 Activity 的优先级高于搜索 Activity,因此,Google Play 商店 指示免安装应用运行时从详情 Activity 启动此功能。

创建Android免安装应用

需要条件:Google Play,Android Studio 3.0, API21以上

来自Google翻译

原文地址:https://www.cnblogs.com/yongfengnice/p/6929521.html