Перейти к содержимому

Api 29 android что это

  • автор:

Android API. Как поднять версию и что будет с приложениями 31 августа 2023

31 августа Android поднимает версию API до 33-й. Что это значит?

  1. Нельзя будет опубликовать новые приложения с уровнем API ниже 33
  2. Существующие приложения с уровнем API 30 и ниже, то они будут отображаться в поиске на старых версиях Android.

Рубрика «Минимум воды» от канала Bright Startup.

Зачем Android это делает?

Android постоянно поднимает версию своего API для:

  • Улучшения системной производительности (улучшение механизмов работы дисплея, процессора, оптимизация энергопотребления и т. д.)
  • Улучшения функциональности, предоставления новых возможностей для разработчиков и пользователей
  • Улучшения безопасности (исправление уязвимостей и багов, внедрение новых методов защиты и т. п.)

Поднятие версии API позволяет улучшать функциональность и производительность устройств и приложений, а также обеспечивать безопасность в новых условиях рынка.

Как поднять версию?

Краткая справка для разработчиков. Нативно, на Kotlin это делается так:

  1. Найдите строку с compileSdkVersion и измените значение на необходимую версию API.
  2. После этого измените значения minSdkVersion и targetSdkVersion (если необходимо). Установите их в ту же версию, которую вы указали в строке compileSdkVersion.
  3. Сохраните build. gradle.
  4. Пересоберите проект с очисткой

Моя команда пишет на кроссплатформе Ionic, которая в основе имеет Cordova. Там это делается через поднятие версии Cordova:

  1. Откройте терминал и перейдите в корневую папку проекта Ionic.
  2. Затем обновите Cordova Android: ionic cordova platform update android
  3. После успешной установки последней версии платформы Android, обновите ваш build. gradle файл который находиться в каталоге /platforms/android/app/build. gradle.
  4. В файле build. gradle, измените значение minSdkVersion на 33 (текущая версия). Вы также можете изменить значение targetSdkVersion на последнюю доступную версию Android.
  5. Сохраните и закройте build. gradle.
  6. Повторно скомпилируйте и запустите приложение с последней версией Android, чтобы убедиться, что все функции правильно работают.

Теперь ваш проект Ionic поддерживает более высокие версии API в Android.

9.1K показов
4.8K открытий
5 комментариев

Вообще, расклад будет такой по версиям API и требованиям к Android версиям:

Целевой уровень API 33:
— Android 12 (API level 31) и выше — полная поддержка функций.
— Android 11 (API level 30) и выше — некоторые функции могут быть ограничены или недоступны.
Целевой уровень API 31:
— Android 12 (API level 31) и выше — полная поддержка функций.
— Android 11 (API level 30) и выше — некоторые функции могут быть ограничены или недоступны.
Целевой уровень API 30:
— Android 11 (API level 30) и выше — полная поддержка функций.
— Android 7.0 (API level 24) и выше — некоторые функции могут быть ограничены или недоступны.
Уровень API 29 для Wear OS:
— Android 10 (API level 29) и выше — полная поддержка функций.
— Android 7.0 (API level 24) и выше — некоторые функции могут быть ограничены или недоступны.

API 28 VS 29: что лучше?

Сразу говорю, я слабо разбираюсь в API и какая между ними разница. С 1 августа в Google Play новые приложения должны быть с API 28. в IDEA есть возможность поставить API 29. Но я так понял, что это не финальная ее версия, а еще Beta 5 ? Будут ли еще что-то сделать с API 28 или это финальная? Лучше начать новое приложение на 28 или 29 ?

Отслеживать
задан 16 июл 2019 в 11:18
1,906 3 3 золотых знака 10 10 серебряных знаков 31 31 бронзовый знак

С августа 2019 года целевая версия новых приложений должна быть не менее Android 9.0 (API уровня 28). С ноября 2019 года целевая версия обновляемых приложений должна быть не менее Android 9.0 (API уровня 28).

28 июл 2019 в 5:18

@Alex и зачем вы продублировали мой вопрос? какая тут полезная или новая информация? это даже не комментарий, не то чтобы ответ.

29 июл 2019 в 8:04
Интересно, а какой мин. api в 23 году актуален.
20 ноя 2023 в 14:35

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Я бы рекомендовал использовать 28. К 29 могли подъехать не все androidx библиотеки, например, могут быть баги и прочие радости жизни, все же бета. А плюсов для рядового разработчика нет. Когда выйдет новый андроид и плеймаркет скажет, что не хочет кушать ничего ниже 29 — переедите на 29, этот процесс проходит без проблем в подавляющем большинстве случаев

Отслеживать
ответ дан 16 июл 2019 в 12:00
Спицко Дмитрий Спицко Дмитрий
5,084 1 1 золотой знак 5 5 серебряных знаков 24 24 бронзовых знака

Самое разумное решение — ставить максимальную стабильную версию. Так у вас должно всё работать на всех девайсах.

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

Без проверки всё ли у вас работает на новой версии API выкладывать приложение опасно. Часто выходят ломающие изменения, которые, при этом, не активируются, если у вас стоит не последняя версия API.

Отслеживать
ответ дан 16 июл 2019 в 11:55
69.8k 9 9 золотых знаков 66 66 серебряных знаков 123 123 бронзовых знака

API 28 это текущая (последняя на данный момент) стабильная версия Android. API 29, это уже следующая версия, которая должна выйти.

Лучше начать новое приложение на 28 или 29 ?

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

Если это учебное приложение, то без разницы. Можно даже начать сразу на API 29, чтобы присмотреться к новинкам (ИМХО).

Если же это какое-то рабочее приложение, то однозначно API 28, т.к. эта версия стабильна, а в бете ещё может быть много неприятных неожиданностей (баги и т.п.). Плюс вероятно придётся подождать пока для API 29 выйдут совместимые обновления библиотек и т.д.

P.S. Кроме того, я что-то сомневаюсь, что Вам позволят выложить приложение на основе сырого API (опять же моё ИМХО).

Общие сведения об уровнях API Android

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

Быстрый запуск

Xamarin.Android предоставляет три параметра проекта уровня API Android:

  • Целевая платформа — указывает, какую платформу использовать при сборке приложения. Этот уровень API используется во время компиляции в Xamarin.Android.
  • Минимальная версия Android — указывает старую версию Android, которую приложение должно поддерживать. Этот уровень API используется во время выполнения Android.
  • Целевая версия Android — указывает версию Android, в котором предназначено ваше приложение. Этот уровень API используется во время выполнения Android.

Перед настройкой уровня API для проекта необходимо установить компоненты платформы SDK для этого уровня API. Дополнительные сведения о скачивании и установке компонентов пакета SDK для Android см. в статье Установка пакета SDK для Android.

Начиная с августа 2021 г. консоль Google Play требует, чтобы новые приложения были нацелены на API уровня 30 (Android 11.0) или выше. Существующие приложения должны быть ориентированы на API уровня 30 или выше, начиная с ноября 2021 г. Дополнительные сведения см. в разделе Требования к уровню целевого API для play Console статьи «Создание и настройка приложения» документации по консоли Воспроизведения.

  • Visual Studio
  • Visual Studio для Mac

Как правило, для всех трех уровней API Xamarin.Android задано одно и то же значение. На странице Приложение задайте для параметра Компиляция с помощью версии Android (целевая платформа) последнюю стабильную версию API (или, как минимум, версию Android со всеми нужными функциями). На следующем снимке экрана для целевой платформы задано значение Android 7.1 (УРОВЕНЬ API 25 — Nougat):

Версия Целевой платформы по умолчанию компилируется с использованием версии Android

На странице Манифест Android задайте для параметра Минимальная версия Android значение Использовать компиляцию с помощью версии пакета SDK , а для целевой версии Android задайте то же значение, что и для версии Целевой платформы (на следующем снимке экрана для целевой платформы Android задано значение Android 7.1 (Nougat)):

Минимальная и целевая версии Android для параметра Версия Целевой платформы

Если вы хотите поддерживать обратную совместимость с более ранней версией Android, установите минимальную версию Android, чтобы выбрать старую версию Android, которую приложение должно поддерживать. (Обратите внимание, что уровень API 14 — это минимальный уровень API, необходимый для служб Google Play и поддержки Firebase.) В следующем примере конфигурации поддерживаются версии Android от API уровня 14 до УРОВНЯ API 25:

Компиляция с помощью API уровня 25 Nougat, минимальная версия Android, установленная на уровень API 14

Как правило, для всех трех уровней API Xamarin.Android задано одно и то же значение. Задайте для целевой платформы последнюю стабильную версию API (или, как минимум, версию Android со всеми нужными функциями). Чтобы задать целевую платформу, перейдите в раздел Общие сборки > в разделе Параметры проекта. На следующем снимке экрана для целевой платформы задано значение Использовать последнюю установленную платформу (8.0):

Для целевой платформы по умолчанию используется последняя установленная платформа

Параметры минимальной и целевой версии Android можно найти в разделе Сборка > приложения Android в параметрах проекта. Задайте для параметра Минимальная версия Android значение Автоматически — используйте версию целевой платформы и задайте для параметра Целевая версия Android то же значение, что и версия Целевой платформы. На следующем снимке экрана для целевой платформы Android framework задано значение Android 8.0 (уровень API 26) в соответствии с приведенным выше параметром Target Framework:

Настройка уровней целевого объекта и платформы в параметрах проекта

Если вы хотите поддерживать обратную совместимость с более ранней версией Android, измените минимальную версию Android на старую версию Android, которую приложение должно поддерживать. Обратите внимание, что уровень API 14 — это минимальный уровень API, необходимый для служб Google Play и поддержки Firebase. Например, следующая конфигурация поддерживает версии Android уже на уровне API 14:

Для минимальной и целевой версий задано значение Автоматически — используйте версию целевой платформы.

Если приложение поддерживает несколько версий Android, код должен включать проверки среды выполнения, чтобы убедиться, что приложение работает с параметром Минимальная версия Android (дополнительные сведения см. в разделе Проверки среды выполнения для версий Android ниже). Если вы используете или создаете библиотеку, ознакомьтесь с рекомендациями по настройке параметров уровня API для библиотек в разделе Уровни и библиотеки API ниже.

Версии Android и уровни API

По мере развития платформы Android и выпуска новых версий Android каждой версии Android назначается уникальный целочисленный идентификатор, называемый уровнем API. Таким образом, каждая версия Android соответствует отдельному уровню API Android. Так как пользователи устанавливают приложения как в более ранних, так и в последних версиях Android, реальные приложения Android должны быть разработаны для работы с несколькими уровнями API Android.

Версии Android

Каждый выпуск Android имеет несколько имен:

  • Версия Android, например Android 9.0
  • Имя кода (или десерта), например Pie
  • Соответствующий уровень API, например УРОВЕНЬ API 28

Кодовое имя Android может соответствовать нескольким версиям и уровням API (как показано в таблице ниже), но каждая версия Android соответствует ровно одному уровню API.

Кроме того, Xamarin.Android определяет коды версий сборки , которые соответствуют известным в настоящее время уровням API Android. Следующая таблица поможет вам выполнить преобразование между уровнем API, версией Android, именем кода и кодом версии сборки Xamarin.Android (коды версий сборки определяются в Android.OS пространстве имен):

Имя Версия Уровень API Выпущено Код версии сборки
Q 10.0 29 Август 2020 г. BuildVersionCodes.Q
Pie 9.0 28 Август 2018 г. BuildVersionCodes.P
Oreo 8.1 27 Декабрь 2017 г. BuildVersionCodes.OMr1
Oreo 8.0 26 Авг 2017 BuildVersionCodes.O
Nougat 7.1 25 Декабрь 2016 г. BuildVersionCodes.NMr1
Nougat 7,0 24 Август 2016 г. BuildVersionCodes.N
Marshmallow 6.0 23 Авг 2015 BuildVersionCodes.M
Lollipop 5.1 22 Мар 2015 BuildVersionCodes.LollipopMr1
Lollipop 5.0 21 Ноя 2014 BuildVersionCodes.Lollipop
Kitkat Watch 4,4 Вт 20 Июнь 2014 г. BuildVersionCodes.KitKatWatch
Kitkat 4.4. 19 Окт 2013 BuildVersionCodes.KitKat
Желе Боб 4.3 18 Июль 2013 г. BuildVersionCodes.JellyBeanMr2
Желе Боб 4.2-4.2.2 17 Ноябрь 2012 г. BuildVersionCodes.JellyBeanMr1
Желе Боб 4.1-4.1.1 16 Июнь 2012 г. BuildVersionCodes.JellyBean
Мороженое Бутерброд 4.0.3-4.0.4 15 Декабрь 2011 г. BuildVersionCodes.IceCreamSandwichMr1
Мороженое Бутерброд 4.0-4.0.2 14 Октябрь 2011 BuildVersionCodes.IceCreamSandwich
Соты 3.2 13 Июнь 2011 г. BuildVersionCodes.HoneyCombMr2
Соты 3.1.x 12 Май 2011 г. BuildVersionCodes.HoneyCombMr1
Соты 3.0.x 11 Февраль 2011 г. BuildVersionCodes.HoneyComb
Пряник 2.3.3-2.3.4 10 Февраль 2011 г. BuildVersionCodes.GingerBreadMr1
Пряник 2.3-2.3.2 9 Ноябрь 2010 г. BuildVersionCodes.GingerBread
Froyo 2.2.x 8 Июнь 2010 г. BuildVersionCodes.Froyo
Экклер 2.1.x 7 янв 2010 BuildVersionCodes.EclairMr1
Экклер 2.0.1 6 Декабрь 2009 г. BuildVersionCodes.Eclair01
Экклер 2,0 5 Ноябрь 2009 г. BuildVersionCodes.Eclair
кольцевой график; 1.6 4 Сентябрь 2009 г. BuildVersionCodes.Donut
Кекс 1.5 3 Май 2009 г. BuildVersionCodes.Cupcake
Основной 1,1 2 Февраль 2009 г. BuildVersionCodes.Base11
Основной 1,0 1 Октябрь 2008 г. BuildVersionCodes.Base

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

Уровни API Android

Каждое устройство Android работает на одном уровне API. Этот уровень API гарантированно уникален для каждой версии платформы Android. Уровень API точно определяет версию набора API, к которому может вызывать приложение; определяет сочетание элементов манифеста, разрешений и т. д. для кода в качестве разработчика. Система уровней API Android помогает Android определить, совместимо ли приложение с образом системы Android перед установкой приложения на устройство.

При построении приложения оно содержит следующие сведения об уровне API:

  • Целевой уровень API Android, на который создано приложение для запуска.
  • Минимальный уровень API Android, необходимый устройству Android для запуска приложения.

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

Параметры уровня API проекта

В следующих разделах объясняется, как использовать диспетчер пакетов SDK для подготовки среды разработки к целевым уровням API, а затем подробно описано, как настроить целевую платформу, минимальную версию Android и целевую версию Android в Xamarin.Android.

Платформы пакета SDK для Android

Прежде чем выбрать целевой или минимальный уровень API в Xamarin.Android, необходимо установить версию платформы пакета SDK для Android, соответствующую соответствующему уровню API. Диапазон доступных вариантов для целевой платформы, минимальной версии Android и целевой версии Android ограничен диапазоном установленных версий пакета SDK для Android. Диспетчер пакетов SDK можно использовать для проверки установки необходимых версий пакета SDK для Android, а также для добавления новых уровней API, необходимых для вашего приложения. Если вы не знакомы с установкой уровней API, см. статью Установка пакета SDK для Android.

Требуемая версия .NET Framework

Целевая платформа (также известная как compileSdkVersion ) — это конкретная версия платформы Android (уровень API), для которую компилируется приложение во время сборки. Этот параметр указывает, какие API-интерфейсы приложение ожидает использовать при его запуске, но он не влияет на то, какие API фактически доступны вашему приложению при его установке. В результате изменение параметра Target Framework не приводит к изменению поведения среды выполнения.

Целевая платформа определяет, с какими версиями библиотеки связано ваше приложение. Этот параметр определяет, какие API-интерфейсы можно использовать в приложении. Например, если вы хотите использовать метод NotificationBuilder.SetCategory, представленный в Android 5.0 Lollipop, необходимо задать для целевой платформы значение API уровня 21 (Lollipop) или более поздней версии. Если задать для целевой платформы проекта уровень API, например УРОВЕНЬ API 19 (KitKat), и попытаться вызвать SetCategory метод в коде, вы получите ошибку компиляции.

Рекомендуется всегда компилировать с использованием последней доступной версии Target Framework. Это позволяет получить полезные предупреждения для всех устаревших API, которые могут вызываться вашим кодом. Использование последней версии Целевой платформы особенно важно при использовании последних выпусков библиотек поддержки. Каждая библиотека ожидает, что ваше приложение будет компилироваться на минимальном уровне API этой библиотеки поддержки или выше.

  • Visual Studio
  • Visual Studio для Mac

Чтобы получить доступ к параметру Target Framework в Visual Studio, откройте свойства проекта в Обозреватель решений и выберите страницу Приложение:

Страница приложения свойств проекта

Задайте целевую платформу, выбрав уровень API в раскрывающемся меню в разделе Компиляция с помощью версии Android , как показано выше.

Чтобы получить доступ к параметру Целевая платформа в Visual Studio для Mac, щелкните правой кнопкой мыши имя проекта и выберите Параметры. Откроется диалоговое окно Параметры проекта. В этом диалоговом окне перейдите к разделу Общие сборки>, как показано ниже:

Раздел

Задайте целевую платформу, выбрав уровень API в раскрывающемся меню справа от целевой платформы , как показано выше.

Минимальная версия Android

Минимальная версия Android (также известная как minSdkVersion ) — это самая старая версия ОС Android (т. е. самый низкий уровень API), которая может устанавливать и запускать приложение. По умолчанию приложение можно установить только на устройствах, соответствующих параметру Target Framework или более поздней версии. Если параметр Минимальная версия Android ниже параметра Целевая платформа, приложение также может работать в более ранних версиях Android. Например, если для целевой платформы задано значение Android 7.1 (Nougat), а для параметра Минимальная версия Android — Android 4.0.3 (Ice Cream Sandwich), приложение можно установить на любой платформе от уровня API 15 до уровня API 25 включительно.

Хотя ваше приложение может успешно выполнять сборку и установку на этих платформах, это не гарантирует, что оно будет успешно запущено на всех этих платформах. Например, если приложение установлено в Android 5.0 (Lollipop), а код вызывает API, доступный только в Android 7.1 (Nougat) и более поздней версии, приложение получит ошибку среды выполнения и, возможно, завершится сбоем. Таким образом, ваш код должен убедиться в том, что во время выполнения он вызывает только те API, которые поддерживаются устройством Android, на котором он работает. Другими словами, код должен включать явные проверки среды выполнения, чтобы убедиться, что приложение использует новые API только на устройствах, которые достаточно последние для их поддержки. В разделе Проверки среды выполнения для версий Android далее в этом руководстве объясняется, как добавить эти проверки среды выполнения в код.

  • Visual Studio
  • Visual Studio для Mac

Чтобы получить доступ к параметру Минимальная версия Android в Visual Studio, откройте свойства проекта в Обозреватель решений и выберите страницу Манифест Android. В раскрывающемся меню в разделе Минимальная версия Android можно выбрать минимальную версию Android для приложения:

Минимальный параметр Android для целевого назначения, заданный как Компилировать с помощью версии пакета SDK

Если выбрать команду Использовать компиляцию с помощью версии пакета SDK, минимальная версия Android будет совпадать с параметром Target Framework.

Чтобы получить доступ к минимальной версии Android в Visual Studio для Mac, щелкните правой кнопкой мыши имя проекта и выберите Параметры. Откроется диалоговое окно Параметры проекта. Перейдите к разделу Сборка > приложения Android. В раскрывающемся меню справа от минимальной версии Android можно задать минимальную версию Android для приложения:

Минимальная версия Android, заданная как Автоматическая — используйте версию целевой платформы

Если выбран параметр Автоматически — использовать версию целевой платформы, минимальная версия Android будет совпадать с параметром Целевая платформа.

Целевая версия Android

Целевая версия Android (также известная как targetSdkVersion ) — это уровень API устройства Android, на котором ожидается запуск приложения. Android использует этот параметр, чтобы определить, следует ли включить какие-либо режимы совместимости. Это гарантирует, что приложение будет работать так, как вы ожидаете. Android использует параметр Целевая версия Android для вашего приложения, чтобы выяснить, какие изменения в поведении могут быть применены к приложению, не нарушая его (так Android обеспечивает прямую совместимость).

Целевая платформа и целевая версия Android, хотя и имеют очень похожие имена, это не одно и то же. Параметр Target Framework передает сведения о целевом уровне API в Xamarin.Android для использования во время компиляции, а целевая версия Android передает сведения о целевом уровне API в Android для использования во время выполнения (когда приложение установлено и запущено на устройстве).

  • Visual Studio
  • Visual Studio для Mac

Чтобы получить доступ к этому параметру в Visual Studio, откройте свойства проекта в Обозреватель решений и выберите страницу Манифест Android. В раскрывающемся меню в разделе Целевая версия Android можно выбрать целевую версию Android для приложения:

Для целевой версии Android задано значение Компиляция с помощью версии пакета SDK

Рекомендуется явно задать для целевой версии Android последнюю версию Android, которая используется для тестирования приложения. В идеале для него должна быть установлена последняя версия пакета SDK для Android. Это позволяет использовать новые API-интерфейсы, прежде чем выполнять изменения в поведении. Для большинства разработчиков не рекомендуется устанавливать для целевой версии Android значение Использовать компиляцию с помощью версии пакета SDK.

Чтобы получить доступ к этому параметру в Visual Studio для Mac, щелкните правой кнопкой мыши имя проекта и выберите Параметры. Откроется диалоговое окно Параметры проекта. Перейдите к разделу Сборка > приложения Android. В раскрывающемся меню справа от целевой версии Android можно задать целевую версию Android для приложения:

Для целевой версии Android задано значение Автоматически — используйте версию целевой платформы

Рекомендуется явно задать для целевой версии Android последнюю версию Android, которая используется для тестирования приложения. В идеале для него должна быть установлена последняя доступная версия пакета SDK для Android. Это позволит вам использовать новые API-интерфейсы, прежде чем выполнять изменения в поведении. Для большинства разработчиков не рекомендуется устанавливать для целевой версии Android значение Автоматически — использовать целевую версию платформы.

Как правило, целевая версия Android должна быть ограничена минимальной версией Android и целевой платформой. Это означает следующее:

Дополнительные сведения об уровнях пакета SDK см. в документации по Android Developer uses-sdk .

Среда выполнения проверяет наличие версий Android

По мере выпуска каждой новой версии Android API платформы обновляется для предоставления новых или заменяемых функций. За некоторыми исключениями функции API из более ранних версий Android переносятся в новые версии Android без изменений. В результате, если приложение выполняется на определенном уровне API Android, оно обычно может выполняться на более позднем уровне API Android без изменений. Но что делать, если вы также хотите запустить приложение в более ранних версиях Android?

Если выбрать минимальную версию Android, которая ниже параметра Target Framework, некоторые API-интерфейсы могут быть недоступны вашему приложению во время выполнения. Однако приложение по-прежнему может работать на более раннем устройстве, но с ограниченными функциональными возможностями. Для каждого API, недоступного Android.OS.Build.VERSION.SdkInt на платформах Android, соответствующего параметру минимальная версия Android, код должен явно проверка значение свойства , чтобы определить уровень API платформы, на котором выполняется приложение. Если уровень API ниже минимальной версии Android, поддерживающей api, который требуется вызвать, код должен найти способ правильной работы, не вызывая этот API.

Например, предположим, что мы хотим использовать метод NotificationBuilder.SetCategory для классификации уведомлений при запуске в Android 5.0 Lollipop (и более поздних версиях), но мы по-прежнему хотим, чтобы наше приложение работало в более ранних версиях Android, таких как Android 4.1 Jelly Bean (где SetCategory недоступно). Ссылаясь на таблицу версий Android в начале этого руководства, мы видим, что код версии сборки для Android 5.0 Lollipop — . Android.OS.BuildVersionCodes.Lollipop Для поддержки более старых версий Android, которые SetCategory недоступны, наш код может обнаруживать уровень API в среде выполнения и условно вызывать SetCategory только в том случае, если уровень API больше или равен коду версии сборки Lollipop:

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)

В этом примере целевая платформа нашего приложения имеет значение Android 5.0 (уровень API 21), а минимальная версия Android — Android 4.1 (уровень API 16). Так как SetCategory доступен на уровне Android.OS.BuildVersionCodes.Lollipop API и более поздних версий, этот пример кода вызывается SetCategory только тогда, когда он действительно доступен. Он не будет пытаться вызвать SetCategory , если уровень API равен 16, 17, 18, 19 или 20. Функциональность в этих более ранних версиях Android сокращается только в той степени, что уведомления не отсортированы должным образом (так как они не классифицируются по типу), но уведомления по-прежнему публикуются для оповещения пользователя. Наше приложение по-прежнему работает, но его функциональность немного уменьшается.

Как правило, версия сборки проверка помогает вашему коду во время выполнения решить, что делать что-то новым и старым способом. Пример:

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) < // Do things the Lollipop way >else < // Do things the pre-Lollipop way >

Нет быстрого и простого правила, объясняющего, как уменьшить или изменить функциональность приложения, если оно выполняется в более старых версиях Android, в которых не хватает одного или нескольких API. В некоторых случаях (например, в приведенном SetCategory выше примере) достаточно пропустить вызов API, если он недоступен. Однако в других случаях может потребоваться реализовать альтернативные функциональные возможности, Android.OS.Build.VERSION.SdkInt если обнаруживается, что уровень API меньше, чем уровень API, необходимый приложению для обеспечения оптимальной работы.

Уровни и библиотеки API

  • Visual Studio
  • Visual Studio для Mac

При создании проекта библиотеки Xamarin.Android (например, библиотеки классов или библиотеки привязок) можно настроить только параметр Целевая платформа — параметры Минимальная версия Android и Целевая версия Android недоступны. Это связано с отсутствием страницы манифеста Android :

Доступен только параметр Компилировать с помощью версии Android.

При создании проекта библиотеки Xamarin.Android нет страницы приложения Android , на которой можно настроить минимальную версию Android и целевую версию Android. Параметры Минимальная версия Android и Целевая версия Android недоступны. Это связано с тем, что нет страницы Сборка > приложения Android :

Страница

Параметры Минимальная версия Android и Целевая версия Android недоступны, так как результирующая библиотека не является автономным приложением. Библиотека может быть запущена в любой версии Android в зависимости от того, с каким приложением она упакована. Вы можете указать способ компиляции библиотеки, но нельзя предсказать, на каком уровне API платформы будет работать библиотека. Учитывая это, при использовании или создании библиотек следует соблюдать следующие рекомендации:

  • При использовании библиотеки Android . Если вы используете библиотеку Android в приложении, обязательно задайте для параметра Целевая платформа приложения уровень API, который по крайней мере не ниже, чем параметр Target Framework библиотеки.
  • При создании библиотеки Android — если вы создаете библиотеку Android для использования другими приложениями, обязательно установите для параметра Target Framework минимальный уровень API, необходимый для компиляции.

Эти рекомендации помогут предотвратить ситуацию, когда библиотека пытается вызвать API, который недоступен во время выполнения (что может привести к сбою приложения). Если вы являетесь разработчиком библиотеки, следует стремиться ограничить использование вызовов API небольшим и хорошо установленным подмножеством общей контактной зоны API. Это помогает обеспечить безопасное использование библиотеки в более широком диапазоне версий Android.

Итоги

В этом руководстве объясняется, как уровни API Android используются для управления совместимостью приложений в разных версиях Android. В ней приведены подробные инструкции по настройке параметров проекта Xamarin.Android Target Framework, Минимальная версия Android и Целевая версия Android . В нем приведены инструкции по использованию диспетчера пакетов SDK для Android для установки пакетов SDK, приведены примеры написания кода для работы с различными уровнями API во время выполнения, а также объясняется, как управлять уровнями API при создании или использовании библиотек Android. Он также предоставил полный список, который связывает уровни API с номерами версий Android (например, Android 4.4), именами версий Android (например, Kitkat) и кодами версий сборки Xamarin.Android.

Связанные ссылки

  • Установка пакета SDK для Android
  • Изменения в инструментарии CLI пакета SDK
  • Выбор объекта compileSdkVersion, minSdkVersion и targetSdkVersion
  • Что такое уровень API?
  • Кодовые имена, теги и номера сборки

Уровень Android API, обратная и прямая совместимость

Если вы читаете эту статью, значит вас могут интересовать такие вещи, как:

  • Что означает уровень API?
  • Как использовать compileSdkVersion , minSdkVersion или targetSdkVersion ?
  • Как можно гарантировать, что приложение будет работать правильно на устройствах с разными версиями ОС?

Все эти понятия связаны друг с другом, и я постараюсь объяснить их вам в этой статье простым, но эффективным способом.

Для этого необходимо понимать разницу между SDK и API и знать что такое уровень API в экосистеме Android.

Это правда, что в Android между SDK и API существует отношение 1:1, и часто эти два термина используются как синонимы, но важно понимать, что это не одно и то же.

Правильнее говорить, что для каждой версии Android есть SDK и эквивалентный API, а также уровень этого API.

SDK

Расшифровывается как Software Development Kit (комплект для разработки программного обеспечения). Обратите внимание на слово «kit» (комплект)… он как раз представляет из себя набор различных инструментов, библиотек, документации, примеров, помогающих разработчикам создавать, отлаживать и запускать приложения для Android. API предоставляется вместе с SDK.

Если открыть SDK Manager в Android Studio, можно будет яснее увидеть, из чего состоит Android SDK.

На первой вкладке SDK Platform перечислены SDK каждой версии Android.

Как показано на рисунке ниже, Android 9.0 SDK (также известный как Pie) содержит:

  • Android SDK Platform 28 (это API фреймворка).
  • Исходный код для Android 28 (это реализация API, как вы видите, она не является обязательной… запомните это).
  • и еще куча других вещей… например, различные системные образы для эмулятора Android.

Обзор SDK в Android Studio SDK Manager.

На второй вкладке SDK Tools показаны другие инструменты, которые также являются частью SDK, но не зависят от версии платформы. Это означает, что они могут быть выпущены или обновлены отдельно.

API

Расшифровывается как Application Programming Interface (программный интерфейс приложения). Это просто интерфейс, уровень абстракции, который обеспечивает связь между двумя разными «частями» программного обеспечения. Он работает как договор между поставщиком (например, библиотекой) и потребителем (например, приложением).

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

Уровень API

Уровень API — это целочисленное значение, однозначно идентифицирующее версию API фреймворка, предлагаемую платформой Android.

Обычно обновления API фреймворка платформы разрабатываются таким образом, чтобы новая версия API оставалась совместимой с более ранними версиями, поэтому большинство изменений в новом API являются аддитивными, а старые части API становятся устаревшими, но не удаляются.

И теперь кто-то может задаться вопросом…

если API Android не предоставляет реализацию, а SDK Manager предлагает необязательный загружаемый исходный код API в составе SDK, то где находится соответствующая реализация?

Ответ прост. На устройстве.

Давайте разберемся с этим…

От исходного кода к APK-файлу

Как правило, проект под Android состоит из кода, написанного разработчиками с использованием Android API (модуль приложения), а также некоторых других библиотек/зависимостей (.jar-файлов, AAR, модулей и т.д.) и ресурсов.

Процесс компиляции преобразует код, написанный на Java или Kotlin, включая зависимости (одна из причин уменьшить ваш код!), в байт-код DEX, а затем сжимает все в файл APK вместе с ресурсами. На данном этапе реализация API не включена в итоговый APK!

Процесс сборки — Android Developers

DEX файлы и Android Runtime

Архитектура Android — Android Developers

Android Runtime — это место, где делается вся грязная работа и где выполняются DEX-файлы. Оно состоит из двух основных компонентов:

  • Виртуальная машина, чтобы воспользоваться преимуществами переносимости кода и независимости от платформы. Начиная с Android 5.0 (Lollipop), старая среда выполнения, Dalvik Virtual Machine, была полностью заменена новой средой Android RunTime (ART). Dalvik использовал JIT-компилятор, тогда как ART использует AOT (Ahead of time) компиляцию плюс JIT для профилирования кода во время выполнения.
  • Базовые библиотеки — это стандартные библиотеки Java и Android. Проще говоря, именно здесь находится реализация API.

Версия API, доступная на этом уровне, соответствует версии платформы Android, на которой запущено приложение.

Например, если на фактическом устройстве установлен Android 9 (Pie), доступны все API до 28 уровня.

Если вам понятны ключевые моменты работы Android Runtime и какова роль API, то должно быть достаточно просто понять обратную и прямую совместимость, а так же использование compileSdkVersion , minSdkVersion и targetSdkVersion .

compileSdkVersion

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

Настоятельно рекомендуется выполнить компиляцию с последней версией SDK:

  • высокий уровень API позволяет разработчикам использовать преимущества последнего API и возможностей, предоставляемых новыми платформами.
  • чтобы использовать последнюю версию SupportLibrary , compileSdkVersion должен соответствовать версии SupportLibrary .
  • для перехода на AndroidX или его использования, compileSdkVersion должен быть установлен как минимум равным 28.
  • чтобы быть готовым удовлетворить требования целевого уровня API от Google Play. В Google объявили, что для более быстрого распространения новых версий Android на рынке Google каждый год будет устанавливать минимальный целевой уровень API для новых приложений и обновлений. Больше информации вы можете найти здесь и здесь.

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

Приложение + compileSdkVersion = 26 и метод API xyz() , представленный в API 26 уровня, могут работать на устройстве с Android 8 Oreo (API 26 уровня).

Это же приложение может работать на устройстве с Android 9 Pie (API 28 уровня), поскольку метод API xyz() все еще доступен на API 28 уровня.

minSdkVersion

Это значение обозначает минимальный уровень API, на котором приложение может работать. Это минимальное требование. Если не указан, значением по умолчанию является 1.

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

Во время разработки Lint также предупредит разработчиков при попытке использовать любой API ниже указанного в minSdkVersion . Очень важно не игнорировать предупреждения и исправить их!

Чтобы обеспечить обратную совместимость, разработчики могут во время выполнения проверять версию платформы и использовать новый API в более новых версиях платформы и старый API в более старых версиях или, в зависимости от случая, использовать некоторые статические библиотеки, которые обеспечивают обратную совместимость.

Также важно упомянуть, что Google Play Store использует это значение, чтобы определить, можно ли установить приложение на определенное устройство, сопоставив версию платформы устройства с minSdkVersion приложения.

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

Выбор «правильного» значения для проекта также является бизнес-решением, поскольку оно влияет на то, насколько большой будет аудитория приложения. Посмотрите на распределение платформ.

Приложение + compileSdkVersion = 26 + minSdkVersion = 22 и метод API xyz() , представленный в API 26 уровня, могут работать на устройстве с Android 8 Oreo (API 26 уровня).

Это же приложение можно установить и запустить на более старом устройстве с Android 5.1 Lollipop (API 22 уровня), где метода API xyz() не существует. Если разработчики не обеспечили обратную совместимость ни с помощью проверок времени выполнения, ни с помощью каких-либо библиотек, то приложение будет аварийно завершать работу, как только оно попытается получить доступ к методу API xyz() .

targetSdkVersion

Это значение указывает уровень API, на котором приложение было разработано.

Не путайте его с compileSdkVersion . Последний используется только во время компиляции и делает новые API доступными для разработчиков. Первый, напротив, является частью APK (также как и minSdkVersion ) и изменяет поведение среды выполнения. Это способ, которым разработчики могут контролировать прямую совместимость.

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

Целевой уровень приложения включает поведение среды выполнения, которое зависит от конкретной версии платформы. Если приложение не готово к поддержке этих изменений поведения среды выполнения, оно, вероятно, завершится сбоем.

Простым примером является Runtime Permission, которое было представлено в Android 6 Marshmallow (API 23 уровня).

Приложение может быть скомпилировано с использованием API 23 уровня, но иметь целевым API 22 уровня, если оно еще не готово поддержать новую модель разрешений времени выполнения.

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

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

Теперь соединяя все это вместе, мы видим четкое отношение

minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion

Имейте в виду, что настоятельно рекомендуется выполнить компиляцию в соответствии с последним уровнем API и стараться использовать targetSdkVersion == compileSdkVersion.

Источники
  • uses-sdk-element documentation — Android Developers
  • Android Runtime — Wikipedia
  • How Android Apps are built and run — David Griffiths GitHub
  • Platform Architecture — Android Developers
  • Android RunTime (ART) and Dalvik — Android Source
  • Meet Google Play’s target API level requirement — Android Developers
  • Configure your Build — Android Developers
  • Picking your compileSdkVersion, minSdkVersion and targetSdkVersion — Ian Late Medium

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *