Я пишу приложение, которое использует некоторые функции и классы, доступные только на последнем уровне 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 >= 16" или аналогичном, но если я просто очищу проект, то эти ошибки волшебным образом исчезнут.
Итак, мой вопрос: разрешено ли мне это делать? Не будет ли сбой кода, если я запустил его на устройстве уровня 15 API? Будет ли это только сбой, если он действительно доберется до 16 кода? Почему Eclipse не останавливает меня от его создания?
Изменить 1
Спасибо за ответы, я думаю, вопрос действительно должен быть: почему я не буду предупреждать меня об использовании новых API?
У меня это в моем манифесте, и я использую функции уровня API 16, но он все равно меня не предупреждает:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
Также я все еще не уверен, когда целые классы являются новыми для уровня API, например Advanceable
. В частности, если я использую их как переменные-члены.
Изменить 2
Ответ оказался "Eclipse багги, как ад", но ответ Нико также очень помог.