Escrevendo código Android compatível com versões anteriores
Estou escrevendo um aplicativo que usa algumas funções e classes disponíveis apenas no nível de API mais recente - 16, mas quero que ele seja executado sem erros em dispositivos com nível de API 15.
Vamos usar alguns exemplos. Uma nova classe:Android.widget.Advanceable
e um novo método / renomeado:View.setBackground()
:
Eu posso fazer algo assim:
Advanceable myAdvanceable = ...;
if (android.os.Build.VERSION.SDK_INT >= 16)
{
myView.setBackground(...);
myAdvanceable.advance();
}
else
{
myView.setBackgroundDrawable(...); // The old function name.
// Don't bother advancing advanceables.
}
E se eu definir um minSdk de 15, mas um alvo de compilação de 16 (ou seja, em Propriedades do Projeto-> Android), ele será realmente compilado sem erros. Pelo menos parte do tempo. O Eclipse é um pouco estocástico sobre os erros e, às vezes, diz que "setBackground () só está disponível no nível da API> = 16" ou similar, mas se eu limpar o projeto, os erros desaparecerão magicamente.
Então, minha pergunta é: eu posso fazer isso? O código não irá falhar se eu o executar em um dispositivo de nível 15 da API? Será que ele só irá falhar se realmente chegar ao código 16? Por que o Eclipse não me impede de construí-lo?
Editar 1Obrigado pelas respostas, acho que a pergunta deveria ser: por que não vai me avisar sobre o uso de novas APIs?
Eu tenho isso no meu manifesto, e estou usando o nível de API 16 funções, mas ainda não me avisar:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
Além disso, ainda não tenho certeza sobre quando classes inteiras são novas para um nível de API, comoAdvanceable
. Especificamente, se eu usá-los como variáveis de membro.
A resposta acabou sendo "Eclipse is buggy as hell", mas a resposta de Nico também foi muito útil.