Qual é a diferença entre o compileSdkVersion e o targetSdkVersion?
olhei para a documentação {[[9]}para construir com grades, mas ainda não sei qual é a diferença entre {[[0]} e targetSdkVersion
.
Bem, qual é o "alvo de compilação"? Vejo duas formas possíveis de interpretar isto:a propriedade
compileSdkVersion
especifica o alvo de compilação.
-
compileSdkVersion
é a versão do compilador usada na construção da aplicação, enquantotargetSdkVersion
é o " nível de API que os alvos da aplicação " . (Se este fosse o caso, eu assumiria {[[0]} deve ser maior ou igual atargetSdkVersion
?
Eles significam a mesma coisa. "compilation target" = = "the API level that the application targets"
Mais alguma coisa?
vejo que esta pergunta já foi feita antes, mas a única resposta cita apenas o doc, que é o que não é claro para mim.
9 answers
CompileSdkVersion
O {[[0]} é a versão da API em que o app é compilado. Isso significa que você pode usar recursos Api Android incluídos nessa versão da API (bem como todas as versões anteriores, obviamente). Se tentar usar as funcionalidades da API 16, mas configurar compileSdkVersion
para 15, irá obter um erro de compilação. Se definir compileSdkVersion
para 16, Poderá à mesma correr a aplicação num dispositivo API 15, desde que os caminhos de execução da sua aplicação não tentem invocar nenhuma APIs específica da API 16.
TargetSdkVersion
O targetSdkVersion
não tem nada a ver com a forma como o seu aplicativo é compilado ou que APIs você pode utilizar. O targetSdkVersion
deve indicar que você testou o seu aplicativo (presumivelmente até e incluindo) na versão que você especificar. Isto é mais como uma certificação ou assinar fora que você está dando o sistema operacional Android como uma dica para como ele deve lidar com o seu aplicativo em termos de recursos do sistema operacional.
Por exemplo, como a documentação diz:
Para por exemplo, definir este valor para "11" ou superior permite que o sistema aplique um novo tema padrão (Holo) para o seu aplicativo ao executar no Android 3.0 ou superior...
O sistema operacional Android, no tempo de execução , pode alterar a forma como o seu aplicativo é estilizado ou executado de outra forma no contexto do sistema operacional baseado neste valor. Existem alguns outros exemplos conhecidos que são influenciados por este valor e que a lista provavelmente só irá aumentar ao longo do tempo.
Para todos os fins práticos, a maioria dos aplicativos são indo para querer definir targetSdkVersion
para a última versão lançada da API. Isto irá garantir que o seu aplicativo parece tão bom quanto possível nos dispositivos Android mais recentes. Se não indicar o targetSdkVersion
, Ele é por omissão o minSdkVersion
.
Como guia oneliner:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
Idealmente:
minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
O compileSdkVersion
deve ser a versão estável mais recente.
O targetSdkVersion
deve ser completamente testado e inferior ou igual a compileSdkVersion
.
compileSdkVersion
é a versão da API em que o app é compilado, enquanto o targetSdkVersion
indica a versão em que o app foi testado.
Gostaria de completar essas respostas com as seguintes notas:
-
Que
targetSdkVersion
impacta a forma como as permissões são solicitadas:- Se o dispositivo estiver a correr Android 6.0 (nível 23 da API) ou superior, e a app
targetSdkVersion
é igual ou superior a 23, a app pede permissões do utilizador em tempo de execução. - Se o dispositivo estiver a correr o Android 5.1 (nível de API 22) ou mais baixo, ou se o app
targetSdkVersion
For 22 ou inferior, o sistema pede ao utilizador para conceder as permissões quando o utilizador instalar o app.
- Se o dispositivo estiver a correr Android 6.0 (nível 23 da API) ou superior, e a app
Se o
compileSdkVersion
for superior à versão declarada pelotargetSdkVersion
do seu aplicativo, o sistema pode permitir comportamentos de compatibilidade para garantir que o seu aplicativo continua a trabalha como esperavas. (ref)-
Com cada novo lançamento do Android...
-
targetSdkVersion
deve ser aumentado para corresponder ao último nível da API, e depois testar cuidadosamente a sua aplicação na versão da plataforma correspondente -
compileSdkVersion
, por outro lado, não precisa de ser alterado a menos que esteja a adicionar funcionalidades exclusivas à nova versão da plataforma - como resultado, enquanto {[1] } é frequentemente (inicialmente) menor que {[[0]}, não é incomum ver uma aplicação bem mantida / estabelecida com
targetSdkVersion > compileSdkVersion
-
The CompileSdkVersion
é a versão da plataforma SDK com a qual o seu aplicativo trabalha para compilação, etc durante o processo de desenvolvimento (você deve sempre usar o mais recente) que é enviado com a versão API que você está usando
Vais ver isto no teu ficheiro build.gradle
:
targetSdkVersion:
contém a informação que o seu aplicativo envia com APÓS O processo de desenvolvimento para a app store que lhe permite TARGET the SPECIFIED version of the Android platform
. Dependendo da funcionalidade do seu aplicativo, ele pode as versões da API alvo são inferiores às actuais.Por exemplo, você pode atingir a API 18 mesmo que a versão atual seja 23.
Vejo muitas diferenças sobre compiledSdkVersion
em respostas anteriores, então vou tentar esclarecer um pouco aqui, seguindo a página web do android.
O Que o Andróide diz
De Acordo com https://developer.android.com/guide/topics/manifest/uses-sdk-element.html:
Então, esta seria a ordem certa de acordo com o Android:Seleccionar uma versão de plataforma e nível de API quando estiver a desenvolver sua aplicação, você terá que escolher a versão da Plataforma contra que irá compilar aplicacao. em geral, deve compilar a sua aplicação contra a versão mais baixa possível da plataforma que a sua candidatura pode apoiar.
compiledSdkVersion = minSdkVersion <= targetSdkVersion
B - O que outros também dizem
Algumas pessoas preferem usar sempre o maior compiledSkdVersion disponível. É porque eles vão confiar em dicas de código para verificar se eles estão usando recursos API mais recentes do que minSdkVersion, ou alterando o código para não usá-los ou verificando a versão da API do usuário no tempo de execução para usá-los condicionalmente com fallbacks para versões mais antigas da API.
Sugestões sobre utilizações desactualizadas também apareceriam em código, informando-o de que algo está desactualizado nos níveis de API mais recentes, para que possa reagir de acordo, se assim o desejar.
Então, esta seria a ordem certa de acordo com outros:minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)
O que fazer?
Depende de tu e a tua aplicação.
Se planeia oferecer diferentes funcionalidades de API de acordo com o nível de API do utilizador em tempo de execução, use a opção B. irá obter dicas sobre as funcionalidades que usa enquanto codifica. Certifique-se apenas de que nunca usa funcionalidades mais recentes da API do que o minSdkVersion sem verificar o nível da API do utilizador durante a execução, caso contrário a sua aplicação irá estoirar. Esta abordagem também tem o benefício de aprender o que é novo e o que é velho enquanto codifica.
Se já sabe o que é novo ou velho e está a desenvolver um uma vez app que, com certeza, nunca será atualizado, ou você tem certeza que você não vai oferecer novas funcionalidades da API condicionalmente, em seguida, use a opção A. Você não vai se incomodar com dicas depreciadas e você nunca será capaz de usar recursos mais recentes da API, mesmo se você estiver tentado a fazê-lo.Meus 2 centavos: Compile contra qualquer versão do SDK, mas tenha o cuidado de não chamar qualquer APIs que a sua "versão mínima SDK" não suporta. Isso significa que você "poderia" compilar contra a última versão do SDK.
Quanto à" versão alvo", ela simplesmente se refere ao que você planejou para o alvo em primeiro lugar e, possivelmente, ter testado contra. Se você ainda não fez a devida diligência, então esta é a maneira de informar o Android que ele precisa realizar algumas verificações adicionais antes de implantar vamos dizer " Chupa-chupa "na App"Oreo".
Então a" versão alvo "obviamente não é inferior à sua" versão SDK mínima", mas não pode ser superior à sua"versão compilada".