Когда вы устанавливаете targetSdkVersion = "xx", вы подтверждаете, что ваше приложение работает должным образом (например, было тщательно и успешно протестировано) на уровне API xx.
Версия Android, работающая на уровне API выше xx, автоматически применяет код совместимости для поддержки любых функций, на которые вы могли полагаться, которые были доступны на уровне или до уровня API xx, но которые теперь устарели на более высоком уровне этой версии Android.
И наоборот, если вы используете какие-либо функции, которые устарели на или до до уровня xx, код совместимости не будет автоматически применяться версиями ОС на более высокие уровни API (которые больше не включают эти функции) для поддержки такого использования. В этой ситуации в вашем собственном коде должны быть специальные предложения, которые проверяют уровень API, и, если обнаружен более высокий уровень ОС, который больше не имеет данной функции API, ваш код должен использовать альтернативные функции, которые равны доступно на уровне API работающей ОС.
Если это не удастся сделать, то некоторые функции интерфейса могут просто не отображаться, что обычно вызывает события в вашем коде, и вам может не хватать критической функции интерфейса, которая необходима пользователю для запуска этих событий и доступа к их функциям как в примере ниже).
Как указано в других ответах, вы можете установить targetSdkVersion выше, чем minSdkVersion, если вы хотите использовать некоторые функции API, изначально определенные на более высоких уровнях API, чем ваш minSdkVersion, и предприняли шаги, чтобы гарантировать, что ваш код может обнаруживать и обрабатывать отсутствие эти функции на более низких уровнях, чем targetSdkVersion.
Чтобы предупредить разработчиков о необходимости конкретного тестирования минимального уровня API, необходимого для использования функции, компилятор выдаст ошибку (а не просто предупреждение), если код содержит вызов любого метода, который был определен на более позднем уровне API. чем minSdkVersion, даже если targetSdkVersion больше или равен уровню API, на котором этот метод был впервые доступен. Чтобы устранить эту ошибку, директива компилятора
@TargetApi(nn)
сообщает компилятору, что код в области действия этой директивы (которая будет предшествовать либо методу, либо классу) был написан для проверки уровня API по крайней мере nn перед вызовом любого метода, который зависит от наличия по крайней мере этот уровень API. Например, следующий код определяет метод, который можно вызывать из кода в приложении, у которого minSdkVersion меньше 11 и targetSdkVersion 11 или выше:
@TargetApi(11)
public void refreshActionBarIfApi11OrHigher() {
//If the API is 11 or higher, set up the actionBar and display it
if(Build.VERSION.SDK_INT >= 11) {
//ActionBar only exists at API level 11 or higher
ActionBar actionBar = getActionBar();
//This should cause onPrepareOptionsMenu() to be called.
// In versions of the API prior to 11, this only occurred when the user pressed
// the dedicated menu button, but at level 11 and above, the action bar is
// typically displayed continuously and so you will need to call this
// each time the options on your menu change.
invalidateOptionsMenu();
//Show the bar
actionBar.show();
}
}
Вы можете также хотеть объявить более высокий targetSdkVersion, если вы тестировали на этом более высоком уровне, и все работало, даже если вы были не , используя какие-либо функции уровня API выше, чем Ваш minSdkVersion. Это было бы просто для избежания накладных расходов при доступе к коду совместимости, предназначенному для адаптации от целевого уровня до минимального уровня, поскольку вы бы подтвердили (посредством тестирования), что такая адаптация не требуется.
Примером функции пользовательского интерфейса, которая зависит от объявленного targetSdkVersion, может быть кнопка меню с тремя вертикальными точками, которая появляется в строке состояния приложений, имеющих targetSdkVersion меньше 11, когда эти приложения работают под API 11 и выше,Если ваше приложение имеет targetSdkVersion 10 или ниже, предполагается, что интерфейс вашего приложения зависит от существования выделенной кнопки меню, и поэтому кнопка с тремя точками, по-видимому, заменяет более ранние выделенные аппаратные и / или экранные версии.этой кнопки (например, как видно из Gingerbread), когда ОС имеет более высокий уровень API, для которого больше не требуется выделенная кнопка меню на устройстве.Однако, если вы установите targetSdkVersion вашего приложения на 11 или выше, предполагается, что вы воспользовались функциями, представленными на этом уровне, которые заменяют кнопку выделенного меню (например, панель действий), или что вы иным образом обошли без необходимостииметь кнопку системного меню;следовательно, трехточечное меню «кнопка совместимости» исчезает.В этом случае, если пользователь не может найти кнопку меню, он не может нажать ее, и это, в свою очередь, означает, что переопределение onCreateOptionsMenu (меню) вашей деятельности может никогда не быть вызвано, что, в свою очередь, означает, чтозначительная часть функциональности вашего приложения может быть лишена его пользовательского интерфейса.Если, конечно, вы не внедрили панель действий или другие альтернативные средства для доступа пользователей к этим функциям.
minSdkVersion, напротив, устанавливает требование, чтобы версия ОС устройства имела как минимум этот уровень API вЧтобы запустить ваше приложение.Это влияет на то, какие устройства могут видеть и загружать ваше приложение, когда оно находится в магазине приложений Google Play (и, возможно, также в других магазинах приложений).Это способ заявить, что ваше приложение опирается на функции ОС (API или других), которые были установлены на этом уровне, и не имеет приемлемого способа справиться с отсутствием этих функций.
Пример использованияminSdkVersion, чтобы гарантировать наличие функции, не связанной с API, будет состоять в том, чтобы установить minSdkVersion в 8, чтобы гарантировать, что ваше приложение будет работать только на JIT-версии интерпретатора Dalvik (так как JITбыл представлен интерпретатору Android на уровне API 8).Поскольку производительность интерпретатора с поддержкой JIT может быть в пять раз выше, чем у одного, у которого отсутствует эта функция, если ваше приложение интенсивно использует процессор, вам может потребоваться API уровня 8 или выше для обеспечения адекватной производительности.