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