The ExtServices module updates framework components for core OS functionality, such as notification ranking, autofill text-matching strategies, storage cache, package watchdog, and other services that run continually. This module is updatable, meaning it can receive updates to functionality outside of the normal Android release cycle.
Service components
The ExtServices module contains the following services.
DisplayHashingService
starting in Android 12TextClassifierService
starting in Android 11InlineSuggestionsRenderService
starting in Android 11AutofillFieldClassificationService
starting in Android 10NotificationAssistantService
starting in Android 10ResolverRankerService
starting in Android 10CacheQuotaService
starting in Android 10
DisplayHashingService
In Android 12, DisplayHashingService
is used to
generate an instance of DisplayHash
for the specified buffer. It's also used
to verify that a specific display hash was generated by the system. When
generating a display hash, the caller can specify which of the supported
hashing algorithms it wishes to use.
TextClassifierService
The
TextClassifierService
service component backs TextClassifier
APIs
and Android features such as smart text selection and smart suggestions in
notifications. The ExtServices module contains the default text classifier,
which is verified by the CTS test
TextClassifierPolicyTest.java
.
If needed, you can configure a custom text classifier service by specifying
config_defaultTextClassifierPackage
in
config.xml
.
Custom text classifiers can depend on the default text classifier by calling
TextClassifierService.getDefaultTextClassifierImplementation(Context)
to get an instance of it.
InlineSuggestionRenderService
The InlineSuggestionRenderService
service component enables Inline Suggestions
to be shown in the keyboard suggestion strip. This service is called to render a
View
object holding the Inline Suggestion for the new Inline Autofill flow.
The default implementation for this renderer service calls into
androidx.autofill.inline.Renderer
to render the suggestion. This behavior is verified by CTS tests in
/autofillservice/cts/inline/
.
Package name
Devices running Android 11 must set
config_servicesExtensionPackage
(in
frameworks/base/core/res/res/values/config.xml
) to the ExtServices package
name (com.android.ext.services
). This configuration change is verified by the
CTS test
cts/tests/tests/os/src/android/os/cts/RequiredComponentsTest.java
.
Module boundary
In Android 12, the ExtServices
module code is moved from frameworks/base/apex/extservices
(this is a subdirectory of the frameworks/base project
)
and
packages/modules/ExtServices
.
The new project structure for packages/modules/ExtServices
is as follows:
apex/
(files fromframeworks/base/apex/extservices
)java/
(files frompackages/modules/ExtServices/res
,packages/modules/ExtServices/src
,packages/modules/ExtServices/tests
, and files for new feature)jni/
(files for new feature)native/
(files for new feature)
The ExtServices module boundary is in packages/modules/ExtServices
. Android
11 also moves several TextClassifier
implementation
classes out of frameworks/base/core/
.
Module format
In Android 11, the ExtServices module
(com.android.ext.services
) is in APEX
format. In Android 10, this module is in APK format.
Customization
In Android 11, you can configure a custom text classifier service that calls the default text classifier (however, this isn't recommended). In Android 10, the ExtServices module doesn't provide customization options.
Testing
The Android Compatibility Test Suite (CTS) verifies ExtServices module functionality by running a comprehensive set of CTS tests on every module release. In addition, the Mainline Test Suite (MTS) also contains several ExtServices tests. The full list of ExtServices tests is as follows:
Config changes. Verified by the CTS test
cts/tests/tests/os/src/android/os/cts/RequiredComponentsTest.java
.TextClassifier
config. Verified by CTS testcts/TextClassifierPolicyTest.java
.Autofill inline suggestion. Verified by CTS tests in
cts/inline/
.