Site icon AppTractor

compileSdkVersion и targetSdkVersion: в чем разница?

В этой статье мы более подробно рассмотрим два значения, которые задаются в файле build.gradle: compileSdkVersion и targetSdkVersion.

Обычно мы автоматически обновляем оба этих значения уровня API после выпуска новой версии Android SDK. Но почему это так важно? И почему их два, ведь мы все равно обычно устанавливаем для них одно и то же значение?

Оба compileSdkVersion и targetSdkVersion имеют решающее значение для обработки прямой совместимости в Android, поэтому они оба связаны с тем, что делать, когда появится новая версия Android SDK. Но как именно они работают?

compileSdkVersion

compileSdkVersion определяет, какая версия Android SDK будет использоваться gradle для компиляции вашего приложения.

Например:

В Android 12, в SDK версии 31, был представлен новый API, который позволяет нам легко реализовать сплэш-скрин. В этом новом API заставку можно настроить с помощью следующих свойств:

Если вы хотите использовать этот API в своем приложении, вам сначала необходимо:

Только тогда вы сможете увидеть эти новые свойства. И только после этого вы можете использовать этот новый API экрана-заставки в своем коде.

А как насчет старых устройств?

Это, конечно, не означает, что вы можете использовать только этот новый API и забыть о пользователях, у которых есть более старые версии Android, где этот API недоступен.

Если minSdkVersion в вашем приложении ниже 31, вам также необходимо предоставить альтернативный способ отображения экрана-заставки для тех старых устройств, которые не имеют доступа к этому новому API.

Точно так же некоторые методы или свойства могут быть объявлены устаревшими в этой версии Android SDK, а некоторые даже удалены. Вот почему после обновления compiledSdkVersion в своем приложении вы часто будете видеть некоторые предупреждения и ошибки во время компиляции, которые необходимо устранить.

Но изменение только compileSdkVersion на самом деле не меняет поведения созданного вами приложения.

Как Android узнает, может ли он использовать новые функции с вашим приложением или нет? Вот где в игру вступает targetSdkVersion.

targetSdkVersion

targetSdkVersion — это свойство, которое сообщает системе, для какой версии Android было разработано и протестировано приложение.

Если пользователь запускает ваше приложение на устройстве с версией Android, которая выше, чем targetSdkVersion, заданный в вашем приложении, то система может запустить некоторое функции обратной совместимости, чтобы ваше приложение по-прежнему выглядело и работало таким образом, каким вы задумывали.

Например:

В Android 12 изменен внешний вид пользовательских уведомлений. Раньше они могли использовать всю область уведомлений, но в системе Android 12 стандартный шаблон применяется ко всем настраиваемым уведомлениям, чтобы они выглядели более согласованными.

Если значение targetSdkVersion меньше 31, система предположит, что вы не тестировали эту функцию, и будет отображать уведомления по-старому, чтобы минимизировать риск того, что уведомление не будет отображаться должным образом. Только после обновления целевой версии SDK до 31 будет использоваться новый вид уведомлений.

Все ли изменения в Android SDK обрабатываются таким образом?

Нет, не все изменения, представленные в новых версиях Android, являются целевыми и используют эти механизмы обратной совместимости. В документации вы можете видеть, что для каждого выпуска версии Android изменения разделены на две группы:

Примером последнего может быть введение одноразовых разрешений в Android 11. Когда устройство использует Android версии 11 или выше и приложение запрашивает разрешение на определение местоположения, пользователь может предоставить временный доступ к этим данным, и приложение должно обработать этот выбор, независимо от того, нацелено ли оно на SDK версии 30 или нет.

Связь между компилируемой и целевой версиями SDK

Даже если compileSdkVersion и targetSdkVersion имеют совершенно разные значения, они явно не независимы.

targetSdkVersion не может быть выше compileSdkVersion просто потому, что мы не можем нацеливаться на вещи, о которых мы ничего не знаем во время компиляции.

В идеале compileSdkVersion и targetSdkVersion должны быть одинаковыми и указывать на последнюю версию SDK. Но, конечно, только после того, как вы проверите, что каждое изменение, внесенное в эту версию, правильно работает с вашим приложением!

Источник

Exit mobile version