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.

Tudo o que diz é:

a propriedade compileSdkVersion especifica o alvo de compilação.

Bem, qual é o "alvo de compilação"?

Vejo duas formas possíveis de interpretar isto:
  1. compileSdkVersion é a versão do compilador usada na construção da aplicação, enquanto targetSdkVersion é o " nível de API que os alvos da aplicação " . (Se este fosse o caso, eu assumiria {[[0]} deve ser maior ou igual a targetSdkVersion?
  2. 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.

Author: Community, 2014-11-02

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.

 429
Author: Jeff Mixon, 2014-11-01 23:17:30

Como guia oneliner:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Idealmente:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

Leia mais deste grande post de Ian Lake

 115
Author: Jimmy Kane, 2016-06-15 19:03:55

O compileSdkVersion deve ser a versão estável mais recente. O targetSdkVersion deve ser completamente testado e inferior ou igual a compileSdkVersion.

 29
Author: androidwifi, 2015-11-27 17:49:11
Tarde para o jogo.. e existem várias grandes respostas acima-- essencialmente, que o 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:
  1. 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.
  2. Se o compileSdkVersion for superior à versão declarada pelo targetSdkVersion do seu aplicativo, o sistema pode permitir comportamentos de compatibilidade para garantir que o seu aplicativo continua a trabalha como esperavas. (ref)

  3. 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
 21
Author: Austin D, 2018-04-02 23:09:30

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

enter image description here

Vais ver isto no teu ficheiro build.gradle:

enter image description here

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.

Veja bem esta página oficial do Google.
 18
Author: ojonugwa ochalifu, 2016-04-18 20:24:36

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:

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.

Então, esta seria a ordem certa de acordo com o Android:

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.
 6
Author: CGodo, 2017-04-12 11:11:16

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".

 1
Author: Prab, 2017-11-16 02:51:04

Não respondendo às suas perguntas directas, uma vez que já existem muitas respostas detalhadas, mas vale a pena mencionar, que ao contrário da documentação do Android, o Android Studio está a sugerir usar a mesma versão para {[[0]} e targetSDKVersion.

enter image description here

 1
Author: sshturma, 2018-02-12 03:03:41

As configurações de aplicação das propriedades de um projecto Android no Visual Studio 2017 (15.8.5) parecem tê-las combinadas ou algo do género:

enter image description here

 0
Author: samis, 2018-09-21 12:50:45