Pisanie kompatybilnego z systemem Android kodu

Piszę aplikację, która korzysta z niektórych funkcji i klas dostępnych tylko na najnowszym poziomie API - 16, ale chcę, aby działała bez błędów na urządzeniach z poziomem API 15.

Użyjmy kilku przykładów. Nowa klasa:Android.widget.Advanceableoraz nowa / zmieniona metoda:View.setBackground():

Mogę zrobić coś takiego:

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

A jeśli ustawię minSdk na 15, ale na cel kompilacji na 16 (tj. We właściwościach projektu-> Android), to faktycznie skompiluje się bez błędów. Przynajmniej przez jakiś czas. Eclipse jest trochę stochastyczny w stosunku do błędów i czasami mówi, że „setBackground () jest dostępne tylko na poziomie API> = 16” lub podobnym, ale jeśli po prostu wyczyszczę projekt, te błędy magicznie znikną.

Więc moje pytanie brzmi: czy mogę to zrobić? Czy kod nie ulegnie awarii, jeśli uruchomię go na urządzeniu poziomu API 15? Czy ulegnie awarii tylko wtedy, gdy rzeczywiście dotrze do kodu 16? Dlaczego Eclipse nie powstrzymuje mnie przed budowaniem?

Edytuj 1

Dzięki za odpowiedzi, myślę, że pytanie powinno być naprawdę: Dlaczego lint nie ostrzega mnie przed użyciem nowych API?

Mam to w moim manifeście i używam funkcji API poziomu 16, ale nadal mnie nie ostrzega:

<uses-sdk android:minSdkVersion="15"
    android:targetSdkVersion="16"/>

Nadal nie jestem pewien, kiedy całe klasy są nowe na poziomie API, na przykładAdvanceable. W szczególności, jeśli użyję ich jako zmiennych składowych.

Edytuj 2

Odpowiedź okazała się „Eclipse is buggy as hell”, ale odpowiedź Nico była również bardzo pomocna.

questionAnswers(3)

yourAnswerToTheQuestion