Nível da API do Android, compatibilidade com versÔes anteriores e posteriores

Boa noite amigos. Preparamos uma tradução Ăștil para futuros alunos do Desenvolvedor Android. Curso avançado . ” Estamos felizes em compartilhar este material com vocĂȘ.




Se vocĂȘ estĂĄ lendo este artigo, significa que vocĂȘ pode estar interessado em coisas como:

  • O que significa o nĂ­vel da API?
  • Como usar compileSdkVersion , minSdkVersion ou targetSdkVersion ?
  • Como posso garantir que o aplicativo funcione corretamente em dispositivos com diferentes versĂ”es do sistema operacional?



Todos esses conceitos estĂŁo relacionados entre si, e tentarei explicĂĄ-los neste artigo de uma maneira simples, mas eficaz.

Para fazer isso, vocĂȘ precisa entender a diferença entre o SDK e a API e saber qual Ă© o nĂ­vel da API no ecossistema do Android.

É verdade que no Android existe um relacionamento 1: 1 entre o SDK e a API, e geralmente esses dois termos sĂŁo usados ​​como sinĂŽnimos, mas Ă© importante entender que isso nĂŁo Ă© a mesma coisa.

É mais correto dizer que, para cada versĂŁo do Android, existe um SDK e uma API equivalente, alĂ©m do nĂ­vel dessa API.

SDK


Significa Software Development Kit . Preste atenção à palavra "kit" (kit) ... consiste apenas em um conjunto de vårias ferramentas, bibliotecas, documentação, exemplos que ajudam os desenvolvedores a criar, depurar e executar aplicativos Android. Uma API é fornecida com o SDK.

Se vocĂȘ abrir o SDK Manager no Android Studio, poderĂĄ ver mais claramente em que consiste o Android SDK.

A primeira guia do Platform SDK lista os SDKs de cada versĂŁo do Android.

Conforme mostrado na imagem abaixo, o Android 9.0 SDK (também conhecido como Pie) contém:

  • Plataforma Android SDK 28 (esta Ă© a API da estrutura).
  • O cĂłdigo fonte do Android 28 (esta Ă© uma implementação da API, como vocĂȘ pode ver, Ă© opcional ... lembre-se disso).
  • e vĂĄrias outras coisas ... por exemplo, vĂĄrias imagens do sistema para o emulador do Android.


VisĂŁo geral do SDK no Android Studio SDK Manager.

A segunda guia das ferramentas do SDK mostra outras ferramentas que também fazem parte do SDK, mas são independentes da versão da plataforma. Isso significa que eles podem ser liberados ou atualizados separadamente.

API


Significa Application Programming Interface . É apenas uma interface, uma camada de abstração que fornece um link entre duas "partes" diferentes do software. Funciona como um contrato entre um provedor (por exemplo, uma biblioteca) e um consumidor (por exemplo, um aplicativo).

Este é um conjunto de definiçÔes formais, como classes, métodos, funçÔes, módulos, constantes, que podem ser usadas por outros desenvolvedores para escrever seu código. No entanto, a API não inclui uma implementação.

NĂ­vel da API


O nĂ­vel da API Ă© um valor inteiro que identifica exclusivamente a versĂŁo da API da estrutura oferecida pela plataforma Android.

Normalmente, as atualizaçÔes da API da estrutura da plataforma são projetadas para que a nova versão da API permaneça compatível com as versÔes anteriores, para que a maioria das alteraçÔes na nova API seja aditiva e as partes antigas da API se tornem obsoletas, mas não excluídas.

E agora alguém pode se perguntar ...

se a API do Android não fornece uma implementação e o SDK Manager oferece um código-fonte opcional da API para download como parte do SDK, onde estå a implementação correspondente?

A resposta Ă© simples. No dispositivo

Vamos descobrir ...

Do cĂłdigo fonte para o arquivo APK


Normalmente, um projeto Android consiste em cĂłdigo escrito por desenvolvedores usando a API do Android (mĂłdulo de aplicativo), alĂ©m de algumas outras bibliotecas / dependĂȘncias (arquivos .jar, AAR, mĂłdulos etc.) e recursos.

O processo de compilação converte o cĂłdigo escrito em Java ou Kotlin, incluindo dependĂȘncias (um dos motivos para reduzir seu cĂłdigo!), No bytecode do DEX e compacta tudo em um arquivo APK junto com os recursos. Nesta fase, a implementação da API nĂŁo estĂĄ incluĂ­da no APK final!


Processo de compilação - Desenvolvedores Android

Arquivos DEX e Android Runtime



Arquitetura Android - Desenvolvedores Android

O Android Runtime Ă© o local em que todo o trabalho sujo Ă© realizado e os arquivos DEX sĂŁo executados. Consiste em dois componentes principais:

  • Uma mĂĄquina virtual para aproveitar a portabilidade de cĂłdigo e a independĂȘncia da plataforma. A partir do Android 5.0 (Lollipop), o antigo tempo de execução, Dalvik Virtual Machine, foi completamente substituĂ­do pelo novo Android RunTime (ART). Dalvik usou o compilador JIT, enquanto o ART usa a compilação AOT (Ahead of time) mais JIT para criar o perfil do cĂłdigo em tempo de execução.
  • Bibliotecas base sĂŁo bibliotecas Java e Android padrĂŁo. Simplificando, Ă© aqui que a implementação da API estĂĄ localizada.

A versĂŁo da API disponĂ­vel neste nĂ­vel corresponde Ă  versĂŁo da plataforma Android na qual o aplicativo estĂĄ sendo executado.
Por exemplo, se o Android 9 (Pie) estiver instalado no dispositivo real, todas as APIs até o nível 28 estarão disponíveis.

Se vocĂȘ entende os pontos principais do Android Runtime e qual Ă© o papel da API, deve ser fĂĄcil entender a compatibilidade com versĂ”es anteriores e futuras , alĂ©m do uso de compileSdkVersion , minSdkVersion e targetSdkVersion .

compileSdkVersion


Este valor é usado apenas para informar ao Gradle qual versão do SDK deve ser compilada. Isso permite que os desenvolvedores acessem todas as APIs disponíveis até o nível da API definido para compileSdkVersion .

É altamente recomendável compilar com o SDK mais recente:

  • Um alto nĂ­vel de API permite que os desenvolvedores aproveitem a API mais recente e as oportunidades oferecidas pelas novas plataformas.
  • Para usar a versĂŁo mais recente do compileSdkVersion , compileSdkVersion deve corresponder Ă  versĂŁo do SupportLibrary .

Por exemplo, para usar SupportLibrary-28.xx , compileSdkVersion também deve ser 28.

  • Para alternar para o AndroidX ou usĂĄ-lo, compileSdkVersion deve estar definido como pelo menos 28.
  • estar pronto para atender aos requisitos do nĂ­vel da API de destino do Google Play . O Google anunciou que a cada ano definirĂĄ um nĂ­vel mĂ­nimo de meta de API para novos aplicativos e atualizaçÔes para espalhar as novas versĂ”es do Android para o mercado do Google mais rapidamente. VocĂȘ pode encontrar mais informaçÔes aqui e aqui .

Os aplicativos Android são compatíveis com as novas versÔes da plataforma Android, pois as alteraçÔes na API geralmente são aditivas e a API antiga pode se tornar obsoleta, mas não removida.

Isso significa que a compatibilidade direta Ă© garantida principalmente pela plataforma e, quando vocĂȘ executa o aplicativo em um dispositivo com um nĂ­vel de API mais alto do que o especificado em compileSdkVersion , nĂŁo hĂĄ problemas no tempo de execução, o aplicativo funcionarĂĄ conforme o esperado em versĂ”es mais recentes da plataforma.

Por exemplo:

O aplicativo + compileSdkVersion = 26 e o método API xyz() introduzido no nível da API 26 podem funcionar em um dispositivo com Android 8 Oreo (API nível 26).

O mesmo aplicativo pode funcionar em um dispositivo com Android 9 Pie (API nível 28), pois o método API xyz() ainda estå disponível no nível 28 da API.

minSdkVersion


Este valor indica o nĂ­vel mĂ­nimo da API no qual o aplicativo pode ser executado. Este Ă© um requisito mĂ­nimo. Se nĂŁo especificado, o valor padrĂŁo Ă© 1 .

Os desenvolvedores precisam definir o valor correto e garantir a operação correta do aplicativo até esse nível da API. Isso é chamado de compatibilidade com versÔes anteriores .

Durante o desenvolvimento, o Lint tambĂ©m avisa os desenvolvedores quando eles tentam usar qualquer API abaixo da especificada em minSdkVersion . É muito importante nĂŁo ignorar os avisos e corrigi-los!

Para garantir compatibilidade com versÔes anteriores , os desenvolvedores podem verificar a versão da plataforma em tempo de execução e usar a nova API em versÔes mais recentes da plataforma e a API antiga em versÔes mais antigas ou, dependendo do caso, usar algumas bibliotecas eståticas que fornecem compatibilidade com versÔes anteriores.

Também é importante mencionar que a Google Play Store usa esse valor para determinar se o aplicativo pode ser instalado em um dispositivo específico, comparando a versão da plataforma do dispositivo com o aplicativo minSdkVersion .

Os desenvolvedores devem ter muito cuidado ao escolher esse valor, pois a compatibilidade com versÔes anteriores não é garantida pela plataforma.

Escolher o valor "certo" para um projeto tambĂ©m Ă© uma decisĂŁo de negĂłcios, pois afeta o tamanho do pĂșblico-alvo do aplicativo. Veja a distribuição de plataformas .

Por exemplo:

O aplicativo + compileSdkVersion = 26 + minSdkVersion = 22 e o método API xyz() introduzido no nível da API 26 podem funcionar em um dispositivo com Android 8 Oreo (API nível 26).

O mesmo aplicativo pode ser instalado e executado em um dispositivo mais antigo com Android 5.1 Lollipop (API nível 22), em que o método da API xyz() não existe. Se os desenvolvedores não fornecerem compatibilidade com versÔes anteriores por meio de verificaçÔes de tempo de execução ou de qualquer biblioteca, o aplicativo falharå assim que tentar acessar o método da API xyz() .

targetSdkVersion


Este valor indica o nĂ­vel da API em que o aplicativo foi desenvolvido.

NĂŁo confunda com compileSdkVersion . O Ășltimo Ă© usado apenas em tempo de compilação e disponibiliza novas APIs para os desenvolvedores. O primeiro, por outro lado, faz parte do APK (assim como minSdkVersion ) e altera o comportamento do tempo de execução. É assim que os desenvolvedores podem controlar a compatibilidade direta .

Às vezes, pode haver algumas alteraçÔes de API no sistema base que podem afetar o comportamento do aplicativo ao trabalhar em um novo ambiente de tempo de execução.

O nível do aplicativo de destino inclui um comportamento de tempo de execução específico da versão da plataforma. Se o aplicativo não estiver pronto para suportar essas alteraçÔes no comportamento do tempo de execução, é provåvel que falhe.

Um exemplo simples é a permissão de tempo de execução , que foi introduzida no Android 6 Marshmallow (nível 23 da API).

Um aplicativo pode ser compilado usando uma API de nível 23, mas possui uma API de nível 22 de destino, se ainda não estiver pronto para suportar o novo modelo de permissão de tempo de execução.

Portanto, um aplicativo ainda pode ser compatível sem incluir um novo comportamento em tempo de execução.

De qualquer forma, como jĂĄ mencionado, o Google exige que os aplicativos atendam aos novos requisitos do nĂ­vel da API de destino; portanto, vocĂȘ sempre deve ter alta prioridade para atualizar esse valor.

Agora, juntando tudo, vemos um relacionamento claro

minSdkVersion ≀ targetSdkVersion ≀ compileSdkVersion

Lembre-se de que Ă© altamente recomendĂĄvel que vocĂȘ compile com o nĂ­vel mais recente da API e tente usar targetSdkVersion == compileSdkVersion .

Fontes


Source: https://habr.com/ru/post/pt466367/


All Articles