Qual é a diferença entre a versão mínima do SDK / versão do SDK de destino e a versão do SDK de compilação?

214

Quais são as diferenças entre "versão min sdk / versão sdk de destino" e "compilar versão sdk"? Eu sei o que min e target sdk significa, mas o que significa compilar a versão sdk?

No Eclipse, tenho min / max e target sdk, mas no android studio existem essas três configurações.

Tobias
fonte
Atualmente, estou trabalhando em um aplicativo onde eu costumava targetsdkversion como 12 e todos os meus layouts muito trabalhando de forma anormal, então eu muda-lo de volta a 23 e ele funciona como um encanto então eu acho versão targetsdk deve ser sempre igual a versão compilada
Shahid Sarwar

Respostas:

232

A versão min sdk é a versão mais antiga do SDK do Android em que seu aplicativo pode ser executado. Geralmente, isso ocorre devido a um problema com as APIs anteriores, falta de funcionalidade ou algum outro problema comportamental.

A versão sdk de destino é a versão em que seu aplicativo foi direcionado para execução. Idealmente, isso ocorre devido a algum tipo de condições ideais de execução. Se você "criar seu aplicativo para a versão 19", é onde isso seria especificado. Pode ser executado em versões anteriores ou posteriores, mas é para isso que você estava buscando. Isso é principalmente para indicar a atualidade do seu aplicativo para uso no mercado, etc.

A versão compilar sdk é a versão do Android usada pelo IDE (ou outro meio de compilação) para criar seu aplicativo quando você publica um .apkarquivo. Isso é útil para testar seu aplicativo, pois é uma necessidade comum compilar seu aplicativo à medida que você o desenvolve. Como essa será a versão a ser compilada em um APK, ela será naturalmente a versão do seu lançamento. Da mesma forma, é aconselhável que essa correspondência seja a sua versão sdk de destino.

Matt
fonte
Minha versão sdk de compilação e versão sdk de destino são as mesmas. Ou seja, 21. Meu aplicativo falha quando o executo em dispositivos com nível de API mais baixo. Sou novo no Android, como devo proceder agora?
prgmrDev
2
@prgmrDev Se o seu aplicativo travar em versões inferiores a 21, provavelmente você deve definir sua versão mínima do SDK para 21. Isso realmente não corrigirá seu aplicativo em destinos menores que 21, basta observar que seu aplicativo não é suportado em versões inferiores. Você também tem a opção de determinar exatamente o que está quebrando seu aplicativo (o que mudou na versão 21) e adicionar suporte para cuidar dessa dependência, mas eu suspeito que isso dará muito trabalho e não estará no escopo de um iniciante no Android projeto.
Matt
1
O que acontece se eu definir meu minSdkVersion = 14; targetSdkVersion = 23; e compilar SDK para 19?
Thaduszlay #
5
@thadeuszlay sua pergunta é irrelevante, porque você deve pensar um pouco que, se você pretende rodar na versão 23, como é possível compilá-la com 19! Por favor, siga a fórmula minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad
@ Matt, pode acontecer que, ao usar a compileVersion 26, por exemplo, acidentalmente use um recurso ou API java que não seja suportado na versão 21, que é min sdk? desculpe, realmente não obtendo alguns conceitos fundamentais aqui
haart 17/01
83

A fórmula é

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - é um marcador que define uma versão mínima do Android na qual o aplicativo poderá instalar. Também é usado pelo Lint para impedir a chamada da API que não existe. Também tem impacto no tempo de construção. Portanto, você pode usar os tipos de build para substituir minSdkVersion ao máximo durante o desenvolvimento. Isso ajudará a acelerar a construção usando todas as melhorias que a equipe do Android fornece para nós. Por exemplo, alguns recursos que o Java 8 estão disponíveis apenas a partir de uma versão específica do minSdkVersion.

targetSdkVersion - diz que o sistema Android ativa mudanças específicas de comportamento.

Por exemplo:

  • A partir do Android 6.0 (nível 23 da API) Runtime Permissionsforam introduzidos. Se você definir targetSdkVersion22 ou menos, seu aplicativo não solicitará permissão ao usuário em tempo de execução.

  • A partir do Android 8.0 (nível 26 da API), todos notificationsdevem ser atribuídos a um canal ou ele não aparecerá. Em dispositivos com Android 7.1 (API nível 25) e inferior, os usuários podem gerenciar notificações apenas por aplicativo (efetivamente, cada aplicativo possui apenas um canal no Android 7.1 e inferior).

  • A partir do Android 9 (nível 28 da API) Web-based data directories separated by process,. Se targetSdkVersiontiver mais de 28 anos e você criar vários WebViewprocessos diferentes, receberájava.lang.RuntimeException

compileSdkVersion - na verdade, é a versão da plataforma SDK e informa a Gradle qual SDK do Android usa para compilar. Quando você deseja usar novos recursos ou .javaarquivos de depuração do Android SDK, deve cuidar da compileSdkVersion. Mais um exemplo é o uso do AndroidX que obriga a usar compileSdkVersion- o nível 28. compileSdkVersion não está incluído no seu APK : é puramente usado em compile time. Alterar seu compileSdkVersion não altera o comportamento do tempo de execução. Pode gerar, por exemplo, novos avisos / erros do compilador. Portanto, é altamente recomendável que você sempre compile com o SDK mais recente. Você obterá todos os benefícios das novas verificações de compilação do código existente, evitará novas APIs obsoletas e estará pronto para usar novas APIs. Mais um fato écompileSdkVersion >= Support Library version

Você pode ler mais sobre isso aqui . Também recomendo que você dê uma olhada no exemplo de migração para o Android 8.0.

yoAlex5
fonte
9
Melhor resposta aqui, porque ele realmente explica a diferença prática entre targetSdkVersion e compileSdkVersion
Dean selvagem
@ yoAlex5 Obrigado pela sua resposta. Eu vejo muitos casos targetSdkVersion e compileSdkVersion são os mesmos. Por que o androide fez dois como separados não pode ser suficiente para lidar ou existe alguma razão específica para criar dois campos separados?
Manju
@Manju você pode encontrar mais em SO fio stackoverflow.com/questions/26694108/...
yoAlex5
@ yoAlex5 o que você quer dizer com 'sistema Android para ativar alterações de comportamento específicas', você pode explicar?
precisa saber é o seguinte
@atishr 'mudanças específicas de comportamento' estão listadas no bloco 'Por exemplo'
yoAlex5
74

A versão min sdk é a versão mínima do sistema operacional Android necessária para executar seu aplicativo.

A versão sdk de destino é a versão do Android em que seu aplicativo foi criado para execução.

A versão compilar sdk é a versão do Android usada pelas ferramentas de compilação para compilar e criar o aplicativo para liberar, executar ou depurar.

Normalmente, a versão compilada sdk e a versão sdk de destino são as mesmas.

anuraagy
fonte
23
E quando eles não são os mesmos prós / contras?
powder366
4

compileSdkVersion : O compileSdkVersion é a versão da API na qual o aplicativo é compilado. Isso significa que você pode usar os recursos da API do Android incluídos nessa versão da API (bem como em todas as versões anteriores, obviamente). Se você tentar usar os recursos da API 16, mas definir compileSdkVersion como 15, receberá um erro de compilação. Se você definir compileSdkVersion como 16, ainda poderá executar o aplicativo em um dispositivo API 15.

minSdkVersion : a versão min sdk é a versão mínima do sistema operacional Android necessária para executar seu aplicativo.

targetSdkVersion : a versão sdk de destino é a versão em que seu aplicativo está direcionado para execução.

Vinay John
fonte