[Перепечатка] Общие сведения о compileSdkVersion, minSdkVersion и targetSdkVersion

Я перевел его вслепую, но потом мне надоело переводить, поэтому я перевел его напрямую с помощью Google Translator. Если вы хорошо владеете английским, вам следует прочитать оригинальный текст.

Исходный адрес: выбор компиляцииSdkVersion, minSdkVersion и targetSdkVersion.

Возможно, вы только что разработали приложение, а через несколько месяцев выходит новая версия Android. Что это значит для вашего приложения? Все ставки проиграны?
Вы будете рады узнать, что прямая совместимость находится в центре внимания Android, поэтому существующие приложения, разработанные для предыдущего SDK, не будут ломаться при обновлении пользователей до версий Android. Здесь в игру вступают compileSdkVersion, minSdkVersion и targetSdkVersion: они соответственно контролируют, какие API доступны, какой уровень API требуется и какой режим совместимости используется.

компиляцияSdkVersion

compileSdkVersion — это то, как вы сообщаете Gradle, какую версию Android SDK использовать для компиляции вашего приложения. Требованием использования любого нового API, добавленного на этом уровне, является использование нового Android SDK.

Важно подчеркнуть, что изменение compileSdkVersion не меняет поведение во время выполнения. Конечно, могут появиться новые предупреждения/ошибки компилятора. Ваша compileSdkVersion не включена в ваш APK, она используется исключительно во время компиляции. (Вам действительно стоит исправить эти предупреждения, они были добавлены не просто так!)

Поэтому настоятельно рекомендуется всегда компилировать последнюю версию SDK. Новые проверки компиляции существующего кода принесут вам много преимуществ, позволят избегать новых устаревших API и быть готовыми к использованию новых API.

Обратите внимание: если вы используете Support LIbrary, для использования последней версии Support LIbrary требуется компиляция с использованием последней версии SDK. Например, чтобы использовать библиотеку поддержки 23.1.1, необходимо использовать версию compileSdkVersion не ниже 23 (число перед первой десятичной точкой должно совпадать!). Вообще говоря, новая версия Support LIbrary будет выпущена вместе с выпуском новой версии платформы, обеспечивая прокладки совместимости для новых добавленных API и новых функций.

minSdkVersion

Если compileSdkVersion устанавливает новейший доступный вам API, то minSdkVersion — это нижний предел вашего приложения. minSdkVersion — один из сигналов, используемых Google Play Store для определения того, на какое из устройств пользователя можно установить приложение.

Это также играет важную роль в процессе разработки: по умолчанию lint будет работать с вашим проектом и предупредит вас, когда вы используете какой-либо API выше вашей minSdkVersion, помогая вам избежать попыток вызова несуществующих API. Проверка версии системы во время выполнения — распространенный метод при использовании API только на новых версиях платформы.

Имейте в виду, что используемые вами библиотеки (например, любые библиотеки Surpport или службы Google Play) могут иметь собственную версию minSdkVersion. MinSdkVersion вашего приложения должен быть не ниже minSdksversion ваших зависимостей. Если у вас есть библиотеки, требующие 4, 7 и 9, тогда ваша minSdkVersion должна быть не ниже 9. В том редком случае, когда вы хотите продолжить использовать библиотеку с более высоким значением minSdkVersion, чем ваше приложение (и обработать все крайние случаи/убедиться, что библиотека используется только для более новых версий платформы), вы можете использовать инструмент: маркер overrideLibrary, но обязательно будет тщательный тест!

При выборе minSdkVersion вам следует учитывать статистику на информационной панели, которая дает вам полное представление обо всех устройствах, посетивших Google Play Store за последние семь дней — вашей потенциальной аудитории при публикации вашего приложения в Google Play. Стоит ли поддержка дополнительных 3% устройств времени, необходимого для разработки и тестирования, чтобы обеспечить наилучшее качество обслуживания, в конечном итоге зависит от бизнес-решения.

Конечно, если новый API является ключевым для всего вашего приложения, это немного облегчит обсуждение minSdkVersion. Помните, даже 0,7% из 1,4 миллиарда устройств — это очень много устройств.

targetSdkVersion

Однако наиболее интересным из трех является targetSdkVersion. targetSdkVersion — это основной способ обеспечения прямой совместимости Android, позволяющий не применять изменения поведения, пока targetSdkVersion не был обновлен. Это позволяет вам использовать новый API перед обработкой изменения поведения (например, если вы действительно обновили compileSdkVersion?).

Многие изменения в поведении, подразумеваемые targetSdkVersion, задокументированы непосредственно в VERSION_CODES, но все кровавые подробности также перечислены в разделе «Основные характеристики платформы» для каждой версии и хорошо связаны с таблицей уровней API.

Например, изменения в Android 6.0 описывают, как таргетинг на API 23 может преобразовать ваше приложение в модель разрешений во время выполнения, а изменения в поведении Android 4.4 подробно описывают, как таргетинг на API 19 или выше может изменить методы работы оповещений, установленные с помощью set() и setRepeating(). .

Поскольку некоторые изменения в поведении будут очень очевидны для пользователей (устаревшие кнопки меню, разрешения во время выполнения и т. д.), обновление для использования последней версии SDK должно быть высоким приоритетом для каждого приложения. Это не означает, что вы должны использовать каждую новую представленную функцию или слепо обновлять targetSdkVersion без тестирования — пожалуйста, проверьте перед обновлением targetSdkVersion! Ваши пользователи будут вам благодарны. .

Версии Gradle и SDK

Поэтому важно установить правильные версии compileSdkVersion, minSdkVersion и targetSdkVersion. Как вы можете себе представить, в мире, использующем Gradle и Android Studio, эти значения интегрируются в систему инструментов путем включения в файл build.gradle модуля (также доступен через опцию «Структура проекта» в Android Studio):

android {
  compileSdkVersion 23
  buildToolsVersion “23.0.1”

  defaultConfig {
    applicationId “com.example.checkyourtargetsdk"
    minSdkVersion 7
    targetSdkVersion 23
    versionCode 1
    versionName “1.0”
  }
}

compileSdkVersion — это функция времени компиляции (кто бы мог подумать!), которая является одной из настроек Android вместе с версией ваших инструментов сборки. Два других немного отличаются тем, что они объявляются на уровне варианта сборки: defaultConfig является базой для всех вариантов сборки, куда вы помещаете значения по умолчанию, но вы можете представить более сложную систему, где ваша конкретная версия. Например, приложения имеют разные minSdkVersion. .

minSdkVersion и targetSdkVersion также отличаются от compileSdkVersion, поскольку они включены в ваш окончательный APK. Если вы посмотрите на сгенерированный файл AndroidManifest.xml, вы увидите такие теги:

<uses-sdk android:targetSdkVersion=”23" android:minSdkVersion=”7" />

Вы обнаружите, что если вы поместите его в манифест вручную, он будет игнорироваться при сборке с помощью Gradle (хотя другие системы сборки, безусловно, могут на него полагаться).

Собираем все это вместе

Если вы проработаете выделенные жирным шрифтом комментарии, вы заметите связь между тремя значениями:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Это имеет интуитивно понятный смысл: если compileSdkVersion — ваш «максимум», а minSdkVersion — ваш «минимум», то ваш максимум должен быть как минимум таким же высоким, как и ваш минимум, а ваша цель должна быть где-то посередине.

В идеале в устойчивом состоянии отношения выглядели бы примерно так:

minSdkVersion (lowest possible) <= 
    targetSdkVersion == compileSdkVersion (latest SDK)

Вы охватите самую большую аудиторию, уменьшив minSdkVersion, а также настроив таргетинг и скомпилировав последнюю версию SDK — отличный способ #BuildBetterApps.

Guess you like

Origin blog.csdn.net/u012175780/article/details/126776494