Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Implementación de la biblioteca SDK de Java

La plataforma Android contiene un gran número de bibliotecas compartidas de Java que opcionalmente se pueden incluir en la ruta de clase de aplicaciones usando el <uses-library> etiqueta 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 introduce java_sdk_library , una nueva regla de generación de problemas de compatibilidad solución para las bibliotecas compartidas de Java. 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 compartidas de Java a través de la <uses-library> etiqueta en lugar de la ruta bootclass, java_sdk_library puede verificar que las bibliotecas de Java son API-estable.

El java_sdk_library es una biblioteca de Java que implementa opcionales API SDK para aplicaciones. Bibliotecas implementan a través de java_sdk_library en su archivo de maquillaje ( Android.bp ) realizar las siguientes operaciones:

  • Las bibliotecas talones se generan para incluir stubs , stubs.system y stubs.test . Estas bibliotecas talones se crean mediante el reconocimiento de @hide , @SystemApi y @TestApi anotaciones. 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. Construir con flujo biblioteca de Java SDK

Ejemplos y fuentes

El componente mínimo para las bibliotecas talones son los obligatorios srcs y api_packages propiedades.

java_sdk_library {
        name: "com.android.future.usb.accessory",
        srcs: ["src/**/*.java"],
        api_packages: ["com.android.future.usb"],
    }

Para construir la biblioteca impl utilizado para el tiempo de ejecución, rellenar todos los java_library propiedades, 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 trozos, poblar las droidstubs propiedades, 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 los archivos de origen opcionales que forman parte de la API, pero no forma parte de la biblioteca de tiempo de ejecución.
  • stubs_only_libs : La lista de bibliotecas de Java que se encuentran en la ruta de clase en la construcción de los talones.
  • hidden_api_packages : La lista de nombres de paquetes que deben ser escondido 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 generación llamada prebuilt_apis , que crea el prediseñados talones de Módulos de las bibliotecas y listas de API módulos. 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 . Al soltar la versión, los archivos de listas de API y bibliotecas talones se pueden obtener con la construcción dist con PRODUCT-sdk_phone_armv7-sdk .

El api_dirs propiedad está lista de directorios versión de la API en prebuilt_apis . Los directorios de versión de la API deben estar ubicados en el mismo nivel de directorio con Android.bp .

prebuilt_apis {
        name: "sdk",
        api_dirs: [
            "1",
            "2",
              ....
            "28",
            "current",
        ],
    }

Configurar los directorios con la version / scope /api/ estructura bajo el directorio prebuilts. version corresponde al nivel de principios activos y de scope determina si el directorio es pública, sistema o de prueba.

  • version / scope contiene bibliotecas de Java.
  • version / scope /api contiene API .txt archivos. Crear archivos de texto vacío denominado 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