Написание обратно совместимого кода 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 (, то есть в свойствах проекта -> Android ), он действительно скомпилируется без ошибок. По крайней мере, некоторое время. Eclipse немного стохастичен в отношении ошибок и иногда говорит, что «setBackground ()доступен только на уровне API> = 16» или аналогичном, но если я просто очистю проект, эти ошибки волшебным образом исчезнут.

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

Редактировать 1

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

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

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

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

Редактировать 2

Ответ оказался таким: «Eclipse чертовски глючит», но ответ Нико также оказался очень полезным.

53
задан Pacerier 19 November 2014 в 18:40
поделиться