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.Advanceablee 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 1

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

Editar 2

A resposta acabou sendo "Eclipse is buggy as hell", mas a resposta de Nico também foi muito útil.

questionAnswers(3)

yourAnswerToTheQuestion