Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Implementación de la biblioteca SDK de Java

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 java_sdk_library para la 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 y stubs.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 es current , system_current y test_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.
Genere flujo con la biblioteca Java SDK
Figura 1. Flujo de compilación con la biblioteca Java SDK

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 construir 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 que no forman parte 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 deben estar ocultos 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 verifica 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 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 denominados module_name .txt y module_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