O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Implementando Biblioteca Java SDK

A plataforma Android contém um grande número de bibliotecas Java compartilhadas que podem ser opcionalmente incluídas no classpath de aplicativos usando a tag <uses-library> no manifesto do aplicativo. Como os aplicativos se vinculam a essas bibliotecas, eles devem ser tratados como o restante da API do Android em termos de compatibilidade, revisão da API e suporte a ferramentas. No entanto, a maioria das bibliotecas não possui esses recursos.

O Android 10 apresenta java_sdk_library , uma nova regra de construção para corrigir problemas de compatibilidade para bibliotecas Java compartilhadas. Os fabricantes de dispositivos podem usar esse mecanismo para suas próprias bibliotecas Java compartilhadas, para manter a compatibilidade com versões anteriores de suas APIs. Se os fabricantes de dispositivos usarem suas próprias bibliotecas Java compartilhadas por meio da tag <uses-library> vez do caminho bootclass, java_sdk_library pode verificar se essas bibliotecas Java são estáveis ​​para API.

A java_sdk_library é uma biblioteca Java que implementa APIs SDK opcionais para aplicativos. Bibliotecas implementadas por meio de java_sdk_library em seu arquivo make ( Android.bp ) realizam as seguintes operações:

  • As bibliotecas de stubs são geradas para incluir stubs , stubs.system e stubs.test . Essas bibliotecas de stubs são criadas reconhecendo as @hide , @SystemApi e @TestApi . No momento da construção, eles são referenciados automaticamente quando a versão do SDK é current , system_current e test_current , respectivamente.
  • O Android obtém listas de API por meio de arquivos stubs e verifica se as APIs são mantidas de maneira compatível com versões anteriores, comparando as listas de APIs atuais no mestre às listas de APIs na versão mais recente publicada do Android.
  • Se a biblioteca de implementação para o tempo de execução estiver instalada, um arquivo XML será gerado e instalado.
Fluxo de construção com biblioteca Java SDK
Figura 1. Fluxo de construção com biblioteca Java SDK

Exemplos e fontes

O componente mínimo para as bibliotecas de stubs são as propriedades api_packages e srcs obrigatórias.

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

Para construir a biblioteca impl usada para tempo de execução, preencha todas java_library propriedades java_library , como hostdex , compile_dex e 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 criar bibliotecas de stubs, preencha as propriedades droidstubs , como srcs_lib , srcs_lib_whitelist_dirs , srcs_lib_whitelist_pkgs , merge_annotations_dirs e merge_inclusion_annotations_dirs . Você também pode usar essas propriedades para a biblioteca de stubs:

  • api_srcs : a lista de arquivos de origem opcionais que fazem parte da API, mas não da biblioteca de tempo de execução.
  • stubs_only_libs : a lista de bibliotecas Java que estão no classpath ao construir stubs.
  • hidden_api_packages : a lista de nomes de pacotes que devem ser ocultados da 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,
          }

Manter compatibilidade com versões anteriores

O sistema de construção verifica se as APIs mantêm compatibilidade com versões anteriores, comparando os arquivos de API mais recentes com os arquivos de API gerados no momento da construção. Isso é realizado com uma nova regra de construção chamada prebuilt_apis , que cria os módulos de biblioteca stubs pré-construídos e os módulos de listas de API. Todas as bibliotecas construídas com java_sdk_library deve ter arquivos de API na versão mais recente do api_dirs em prebuilt_apis . Quando você lança a versão, a API lista arquivos e bibliotecas de stubs podem ser obtidas com dist build com PRODUCT-sdk_phone_armv7-sdk .

A propriedade api_dirs é uma lista de diretórios de versão da API em prebuilt_apis . Os diretórios de versão da API devem estar localizados no mesmo nível de diretório com Android.bp .

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

Configure os diretórios com a version / scope /api/ estrutura no diretório prebuilts. version corresponde ao nível da API e o scope determina se o diretório é público, sistema ou teste.

  • version / scope contém bibliotecas Java.
  • version / scope /api contém arquivos API .txt . Crie arquivos de texto vazios chamados module_name .txt e module_name -removed.txt aqui.
    ├── 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