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 dispositivoVamos 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 AndroidArquivos DEX e Android Runtime
Arquitetura Android - Desenvolvedores AndroidO 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