O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando Biblioteca Java SDK

A plataforma Android contém um grande número de bibliotecas Java compartilhados que pode, opcionalmente, ser incluídos no classpath de aplicativos usando o <uses-library> tag 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 de API e suporte a ferramentas. No entanto, a maioria das bibliotecas não possui esses recursos.

Android 10 introduz java_sdk_library , uma nova regra de construção a problemas de compatibilidade correção para as bibliotecas Java compartilhados. 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 usam suas próprias bibliotecas Java compartilhados através do <uses-library> tag em vez do caminho bootclass, java_sdk_library pode verificar que as bibliotecas Java são API estável.

O java_sdk_library é uma biblioteca Java que implementa opcionais APIs do SDK para aplicativos. Bibliotecas implementadas através java_sdk_library em seu arquivo make ( Android.bp ) realizar as seguintes operações:

  • As bibliotecas topos são geradas para incluir stubs , stubs.system , e stubs.test . Esses stubs bibliotecas são criados por reconhecer @hide , @SystemApi e @TestApi anotações. Em tempo de compilação, eles são automaticamente referenciados quando a versão 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 do Android publicada.
  • 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 Construir com biblioteca Java SDK

Exemplos e fontes

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

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

Para construir a biblioteca impl usado para tempo de execução, preencher todos os java_library propriedades, 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 topos, preencher os droidstubs propriedades, tais 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 faz parte da biblioteca de tempo de execução.
  • stubs_only_libs : A lista de bibliotecas Java que estão no classpath quando a construção de topos.
  • hidden_api_packages : A lista de nomes de pacotes que devem ser escondidos do 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 é conseguido com uma nova regra de compilação chamado prebuilt_apis , que cria o pré-construídos topos biblioteca módulos e listas API módulos. 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çar a versão, os arquivos de listas de API e bibliotecas stubs pode ser obtida com a construção dist com PRODUCT-sdk_phone_armv7-sdk .

O api_dirs propriedade é lista de diretórios de versão API em prebuilt_apis . Os diretórios de versão de API deve estar localizado 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 sob o diretório prebuilts. version corresponde ao nível API e scope determina se o diretório é pública, sistema ou teste.

  • version / scope contém bibliotecas Java.
  • version / scope /api contém API .txt arquivos. Criar arquivos de texto vazio chamado 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