Написание обратно совместимого кода 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
, В частности, если я использую их в качестве переменных-членов.
Ответ оказался «Затмение чертовски ошибочно», но ответ Нико также был очень полезным.