Picking your compileSdkVersion, minSdkVersion, e targetSdkVersion

>

Ian Lake

Follow

6 de Janeiro, 2016 – 5 min ler

Dependente da época do ano, pode ser apenas alguns meses após o lançamento de um aplicativo que uma nova versão do Android seja anunciada. Mas o que isso significa para o seu aplicativo – tudo vai quebrar?

Você vai ficar feliz em saber que a compatibilidade futura é um forte foco do Android – aplicativos existentes construídos contra SDKs anteriores não devem quebrar quando o usuário atualizar para uma nova versão do Android. Aqui é onde o compileSdkVersion, minSdkVersion e targetSdkVersion entram: eles controlam quais APIs estão disponíveis, qual o nível de API necessário e quais modos de compatibilidade são aplicados, respectivamente.

compileSdkVersion é a sua maneira de dizer ao Gradle qual versão do SDK do Android para compilar a sua aplicação. Usar o novo SDK do Android é um requisito para usar qualquer uma das novas APIs adicionadas nesse nível.

Deve ser enfatizado que alterar o seu compilleSdkVersion não altera o comportamento do tempo de execução. Enquanto novos avisos/erros do compilador podem estar presentes ao alterar seu compileSdkVersion, seu compileSdkVersion não está incluído no seu APK: ele é usado puramente em tempo de compilação. (Você deve realmente corrigir esses avisos – eles foram adicionados por uma razão!)

Por isso é fortemente recomendado que você compile sempre com o último SDK. Você obterá todos os benefícios de novas verificações de compilação em código existente, evitará APIs recém depreciadas e estará pronto para usar novas APIs.

Note que se você usar a Biblioteca de Suporte, compilar com o SDK mais recente é um requisito para usar as versões mais recentes da Biblioteca de Suporte. Por exemplo, para usar a Biblioteca de Suporte 23.1.1, você deve ter uma compilaçãoSdkVersion de pelo menos 23 (esses primeiros números precisam corresponder!). Em geral, uma nova versão da Biblioteca de Suporte é lançada juntamente com uma nova versão de plataforma, fornecendo calços de compatibilidade para as APIs recém-adicionadas, bem como novos recursos.

minSdkVersion

Se compileSdkVersion define as mais novas APIs disponíveis para você, minSdkVersion é o limite inferior para a sua aplicação. O minSdkVersion é um dos sinais que o Google Play Store usa para determinar em quais dispositivos do usuário uma aplicação pode ser instalada.

Também desempenha um papel importante durante o desenvolvimento: por padrão o lint roda contra o seu projeto, avisando-o quando você usa qualquer API acima do seu minSdkVersion, ajudando-o a evitar o problema de tempo de execução da tentativa de chamar uma API que não existe. Verificar a versão do sistema em tempo de execução é uma técnica comum ao utilizar APIs apenas em versões mais recentes da plataforma.

Cuidado que as bibliotecas que utiliza, como qualquer uma das bibliotecas de suporte ou serviços do Google Play, podem ter o seu próprio minSdkVersion – o minSdkVersion da sua aplicação deve ser pelo menos tão elevado como o minSdkVersion das suas dependências – se tiver bibliotecas que requerem 4, 7 e 9, o seu minSdkVersion deve ser pelo menos 9. Em casos raros onde você quer continuar a usar uma biblioteca com um minSdkVersion superior ao seu aplicativo (e lidar com todos os casos de borda/segure que a biblioteca seja usada apenas em versões mais recentes da plataforma), você pode usar as ferramentas:overrideLibrary marker, mas certifique-se de testar completamente!

Ao decidir sobre um minSdkVersion, você deve considerar as estatísticas nos Dashboards, que lhe dão uma visão global de todos os dispositivos que visitaram a Loja do Google Play nos 7 dias anteriores – esse é o seu público potencial ao colocar um aplicativo no Google Play. Em última análise, é uma decisão de negócios se vale a pena o tempo de desenvolvimento e teste necessário para garantir a melhor experiência.

Obviamente, se uma nova API é a chave para toda a sua aplicação, então isso torna a discussão minSdkVersion um pouco mais fácil. Basta lembrar que mesmo 0,7% de 1,4 bilhões de dispositivos é um monte de dispositivos.

targetSdkVersion

O mais interessante dos três, no entanto, é o targetSdkVersion. targetSdkVersion é a principal maneira que o Android fornece compatibilidade com o futuro não aplicando mudanças de comportamento a menos que o targetSdkVersion seja atualizado. Isso permite que você use novas APIs (como você atualizou seu compilleSdkVersion certo?) antes de trabalhar com as mudanças de comportamento.

Muitas das mudanças de comportamento que o targetSdkVersion implica são documentadas diretamente no VERSION_CODES, mas todos os detalhes do gory também são listados nos destaques da plataforma de cada lançamento, bem ligados na tabela Níveis de API.

Por exemplo, o Android 6.0 mudanças falam sobre como o direcionamento da API 23 faz a transição da sua aplicação para o modelo de permissões de tempo de execução e o comportamento do Android 4.4 muda o detalhe de como o direcionamento da API 19 ou superior muda como os alarmes definidos com set() e setRepeating() funcionam.

Com algumas das mudanças de comportamento sendo muito visíveis para os usuários (a depreciação do botão de menu, permissões de tempo de execução, etc), atualizar para direcionar o SDK mais recente deve ser uma alta prioridade para cada aplicação. Isso não significa que você tem que usar cada nova funcionalidade introduzida nem que você deve atualizar cegamente seu targetSdkVersion sem testar – por favor, teste antes de atualizar seu targetSdkVersion! Seus usuários agradecerão.

Versões Grade e SDK

Por isso configurar corretamente o compiladorSdkVersion, minSdkVersion, e targetSdkVersion é importante. Como você pode imaginar em um mundo com Gradle e Android Studio, esses valores são integrados ao sistema de ferramentas através da inclusão no arquivo build.gradle do seu módulo (também disponível através da opção Project Structure no Android Studio):

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.checkyourtargetsdk"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}

O compilleSdkVersion, sendo uma coisa de tempo de compilação (quem diria!), é uma das configurações do android junto com a sua versão das ferramentas de compilação. As outras duas são ligeiramente diferentes, pois são declaradas no nível de variante de compilação – o padrãoConfig é a base para todas as variantes de compilação e onde você colocou valores padrão para elas, mas você poderia imaginar um sistema mais complicado onde versões específicas da sua aplicação têm um minSdkVersion diferente, por exemplo.

minSdkVersion e targetSdkVersion também diferem do compileSdkVersion por estarem incluídos no seu APK final – se você olhasse para o AndroidManifest.xml gerado, você veria uma tag como:

<uses-sdk android:targetSdkVersion="23" android:minSdkVersion="7" />

Você verá que se você colocar isto manualmente no seu manifesto, ele será ignorado quando você compilar com Gradle (embora outros sistemas de compilação possam certamente confiar que ele esteja lá).

Pondo tudo junto

Se você conseguiu através das notas em negrito, você notará uma relação entre os três valores:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Isso intuitivamente faz sentido – se compileSdkVersion é seu ‘máximo’ e minSdkVersion é seu ‘mínimo’ então seu máximo deve ser pelo menos tão alto quanto seu mínimo e o alvo deve estar em algum lugar no meio.

Idealmente, a relação seria mais parecida com isto no estado estável:

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

Vais atingir o maior público com um minSdkVersion baixo e olhar e agir da melhor forma ao apontar e compilar com o SDK mais recente – uma óptima forma de #BuildBetterApps.

Junte-se à discussão no post do Google+ e siga a coleção Android Development Patterns para mais!

>

>

>

>

Deixe uma resposta

O seu endereço de email não será publicado.