Написание обратно совместимого кода Android

Я пишу приложение, которое использует некоторые функции и классы, доступные только на последнем уровне API - 16, но я хочу, чтобы оно работало без ошибок на устройствах с уровнем API 15.

Давайте использовать пару примеров. Новый класс:Android.widget.Advanceableи новый / переименованный метод:View.setBackground():

Я могу сделать что-то вроде этого:

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

И если я установлю minSdk 15, но цель сборки 16 (то есть в Project Properties -> Android), он на самом деле будет компилироваться без ошибок. По крайней мере, иногда. Eclipse немного стохастичен в отношении ошибок и иногда говорит, что setBackground () доступно только на уровне API & gt; = 16 & quot; или похожее, но если я просто уберу проект, эти ошибки волшебным образом исчезнут.

Итак, мой вопрос, я могу это сделать? Не произойдет ли сбой кода, если я запустлю его на устройстве уровня API 15? Будет ли сбой, только если он действительно получит код 16? Почему «Затмение» не мешает мне его строить?

Edit 1

Спасибо за ответы, я думаю, что вопрос действительно должен звучать так: почему вы не предупредите меня об использовании новых API?

У меня есть это в моем манифесте, и я использую функции API уровня 16, но он все еще не предупреждает меня:

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

Также я до сих пор не уверен, когда целые классы являются новыми для уровня API, такие какAdvanceable, В частности, если я использую их в качестве переменных-членов.

Edit 2

Ответ оказался «Затмение чертовски ошибочно», но ответ Нико также был очень полезным.

Ответы на вопрос(3)

Ваш ответ на вопрос