La plataforma Android contiene una gran cantidad de bibliotecas Java compartidas que, opcionalmente, se pueden incluir en la ruta de clases de las aplicaciones mediante la etiqueta <uses-library>
en el manifiesto de la aplicación. Debido a que las aplicaciones se vinculan con estas bibliotecas, deben tratarse como el resto de la API de Android en términos de compatibilidad, revisión de API y soporte de herramientas. Sin embargo, la mayoría de las bibliotecas no tienen estas funciones.
Android 10 presenta java_sdk_library
, una nueva regla de compilación para solucionar problemas de compatibilidad para bibliotecas Java compartidas. Los fabricantes de dispositivos pueden utilizar este mecanismo para sus propias bibliotecas Java compartidas, para mantener la compatibilidad con versiones anteriores de sus API. Si los fabricantes de dispositivos utilizan sus propias bibliotecas Java compartidas a través de la etiqueta <uses-library>
lugar de la ruta de la clase de arranque, java_sdk_library
puede verificar que esas bibliotecas Java sean estables en API.
java_sdk_library
es una biblioteca de Java que implementa las API de SDK opcionales para las aplicaciones. Las bibliotecas implementadas a través de java_sdk_library
en su archivo make ( Android.bp
) realizan las siguientes operaciones:
- Las bibliotecas de stubs se generan para incluir
stubs
,stubs.system
ystubs.test
. Estas bibliotecas de@hide
@SystemApi
se crean reconociendo las@hide
,@SystemApi
y@TestApi
. En tiempo de compilación, que se referencian automáticamente cuando la versión del SDK escurrent
,system_current
ytest_current
, respectivamente. - Android obtiene listas de API a través de archivos stubs y verifica que las API se mantengan de manera compatible con versiones anteriores comparando las listas de API actuales en el maestro con las listas de API en la versión más reciente de Android publicada.
- Si la biblioteca de implementación para el tiempo de ejecución está instalada, se genera e instala un archivo XML.

Ejemplos y fuentes
El componente mínimo para las bibliotecas de stubs son las srcs
obligatorias srcs
y api_packages
.
java_sdk_library { name: "com.android.future.usb.accessory", srcs: ["src/**/*.java"], api_packages: ["com.android.future.usb"], }
Para crear la biblioteca impl que se usa para el tiempo de ejecución, java_library
todas java_library
propiedades de java_library
, como hostdex
, compile_dex
y errorprone
.
java_sdk_library { name: "android.test.base", srcs: ["src/**/*.java"], errorprone: { javacflags: ["-Xep:DepAnn:ERROR"], }, hostdex: true, api_packages: [ "android.test", "android.test.suitebuilder.annotation", "com.android.internal.util", "junit.framework", ], compile_dex: true, }
Para crear bibliotecas de stubs, droidstubs
propiedades de droidstubs
, como srcs_lib
, srcs_lib_whitelist_dirs
, srcs_lib_whitelist_pkgs
, merge_annotations_dirs
y merge_inclusion_annotations_dirs
. También puede utilizar estas propiedades para la biblioteca de códigos auxiliares:
-
api_srcs
: la lista de archivos de origen opcionales que forman parte de la API pero no de la biblioteca en tiempo de ejecución. -
stubs_only_libs
: la lista de bibliotecas Java que se encuentran en la ruta de clases al crear stubs. -
hidden_api_packages
: la lista de nombres de paquetes que se deben ocultar de la API. -
droiddoc_options
: argumento adicional para metalava.java_sdk_library { name: "android.test.mock", srcs: ["src/**/*.java"], api_packages: [ "android.test.mock", ], srcs_lib: "framework", srcs_lib_whitelist_dirs: ["core/java"], srcs_lib_whitelist_pkgs: ["android"], compile_dex: true, }
Mantener la compatibilidad con versiones anteriores
El sistema de compilación comprueba si las API mantienen la compatibilidad con versiones anteriores comparando los archivos de API más recientes con los archivos de API generados en el momento de la compilación. Esto se logra con una nueva regla de compilación llamada prebuilt_apis
, que crea los módulos de biblioteca de códigos auxiliares precompilados y los módulos de listas de API. Todas las bibliotecas construidas con java_sdk_library
deben tener archivos de la API en la versión más reciente de api_dirs
en prebuilt_apis
. Cuando lanza la versión, la API enumera los archivos y las bibliotecas PRODUCT-sdk_phone_armv7-sdk
se pueden obtener con dist build con PRODUCT-sdk_phone_armv7-sdk
.
La propiedad api_dirs
es una lista de directorios de versiones de API en prebuilt_apis
. Los directorios de la versión de la API deben ubicarse en el mismo nivel de directorio que Android.bp
.
prebuilt_apis { name: "sdk", api_dirs: [ "1", "2", .... "28", "current", ], }
Configure los directorios con la estructura version / scope /api/
bajo el directorio prebuilts. version
corresponde al nivel de API y el scope
determina si el directorio es público, de sistema o de prueba.
-
version / scope
contiene bibliotecas de Java. -
version / scope /api
contiene archivos API.txt
. Cree archivos de texto vacíos denominadosmodule_name .txt
ymodule_name -removed.txt
aquí.├── 28 │ ├── public │ │ ├── api │ │ │ ├── android.test.base-removed.txt │ │ │ └── android.test.base.txt │ │ └── android.test.base.jar │ ├── system │ │ ├── api │ │ │ ├── android.test.base-removed.txt │ │ │ └── android.test.base.txt │ │ └── android.test.base.jar │ └── test │ ├── api │ │ ├── android.test.base-removed.txt │ │ └── android.test.base.txt │ └── android.test.base.jar └── Android.bp