ExtServices

ExtServices 模块会更新核心操作系统功能的框架组件,例如通知排名、自动填充文本匹配策略、存储缓存、软件包监视程序以及其他持续运行的服务。此模块可更新,这意味着它可以在正常的 Android 发布周期之外接收功能更新。

服务组件

ExtServices 模块包含以下服务。

DisplayHashingService

在 Android 12 中,DisplayHashingService 用于为指定的缓冲区生成 DisplayHash 实例。它还用于验证特定的显示哈希是否由系统生成。生成显示哈希时,调用方可以指定希望使用的受支持哈希算法。

TextClassifierService

TextClassifierService 服务组件支持 TextClassifier API 和 Android 功能,例如智能文本选择和通知中的智能建议。ExtServices 模块包含默认文本分类器,该分类器已通过 CTS 测试 TextClassifierPolicyTest.java 验证。

如果需要,您可以通过在 config.xml 中指定 config_defaultTextClassifierPackage 来配置自定义文本分类器服务。自定义文本分类器可以通过调用 TextClassifierService.getDefaultTextClassifierImplementation(Context) 来获取默认文本分类器的实例,从而依赖于默认文本分类器。

InlineSuggestionRenderService

InlineSuggestionRenderService 服务组件使内嵌建议能够显示在键盘建议条中。此服务被调用以渲染一个 View 对象,该对象为新的内嵌自动填充流程保存内嵌建议。此渲染器服务的默认实现调用 androidx.autofill.inline.Renderer 以渲染建议。CTS 测试在 /autofillservice/cts/inline/ 中验证了此行为。

软件包名称

运行 Android 11 的设备必须将 config_servicesExtensionPackage(在 frameworks/base/core/res/res/values/config.xml 中)设置为 ExtServices 软件包名称(com.android.ext.services)。CTS 测试 cts/tests/tests/os/src/android/os/cts/RequiredComponentsTest.java 验证了此配置更改。

模块边界

在 Android 12 中,ExtServices 模块代码从 frameworks/base/apex/extservices(这是 frameworks/base project 的子目录)和 packages/modules/ExtServices 移动。

packages/modules/ExtServices 的新项目结构如下所示

  • apex/(来自 frameworks/base/apex/extservices 的文件)
  • java/(来自 packages/modules/ExtServices/respackages/modules/ExtServices/srcpackages/modules/ExtServices/tests 以及新功能的文件)
  • jni/(新功能的文件)
  • native/(新功能的文件)

ExtServices 模块边界位于 packages/modules/ExtServices 中。Android 11 还将多个 TextClassifier 实现类移出了 frameworks/base/core/

模块格式

在 Android 11 中,ExtServices 模块(com.android.ext.services)采用 APEX 格式。在 Android 10 中,此模块采用 APK 格式。

自定义

在 Android 11 中,您可以配置一个自定义文本分类器服务,该服务调用默认文本分类器(但不建议这样做)。在 Android 10 中,ExtServices 模块不提供自定义选项。

测试

Android 兼容性测试套件 (CTS) 通过在每个模块版本上运行全面的 CTS 测试集来验证 ExtServices 模块的功能。此外,Mainline 测试套件 (MTS) 也包含多个 ExtServices 测试。ExtServices 测试的完整列表如下: