API 28 VS 29: что лучше?
Сразу говорю, я слабо разбираюсь в API и какая между ними разница. С 1 августа в Google Play новые приложения должны быть с API 28. в IDEA есть возможность поставить API 29. Но я так понял, что это не финальная ее версия, а еще Beta 5 ? Будут ли еще что-то сделать с API 28 или это финальная? Лучше начать новое приложение на 28 или 29 ?
Отслеживать
задан 16 июл 2019 в 11:18
1,853 3 3 золотых знака 10 10 серебряных знаков 29 29 бронзовых знаков
С августа 2019 года целевая версия новых приложений должна быть не менее Android 9.0 (API уровня 28). С ноября 2019 года целевая версия обновляемых приложений должна быть не менее Android 9.0 (API уровня 28).
28 июл 2019 в 5:18
@Alex и зачем вы продублировали мой вопрос? какая тут полезная или новая информация? это даже не комментарий, не то чтобы ответ.
29 июл 2019 в 8:04
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 серебряных знаков 122 122 бронзовых знака
API 28 это текущая (последняя на данный момент) стабильная версия Android. API 29, это уже следующая версия, которая должна выйти.
Лучше начать новое приложение на 28 или 29 ?
Лучше сначала определиться, для для кого и для каких устройств или целей Вы пишете приложение, а заодно прикинуть сколько потребуется времени на разработку.
Если это учебное приложение, то без разницы. Можно даже начать сразу на API 29, чтобы присмотреться к новинкам (ИМХО).
Если же это какое-то рабочее приложение, то однозначно API 28, т.к. эта версия стабильна, а в бете ещё может быть много неприятных неожиданностей (баги и т.п.). Плюс вероятно придётся подождать пока для API 29 выйдут совместимые обновления библиотек и т.д.
P.S. Кроме того, я что-то сомневаюсь, что Вам позволят выложить приложение на основе сырого API (опять же моё ИМХО).
Что нового в Android
Когда мы работаем с новыми версиями, всегда есть опасность вызвать методы, которые не будут работать на старых устройствах. Чтобы избежать потенциальных ошибок, нужно делать проверки.
Чтобы Lint не ругался на классы или методы, которые не поддерживаются в API, указанной в minSdkVersion, можно пометить их аннотацией @TargetApi() и в скобках указать поддерживаемую версию API.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) class FpsTimeListener implements TimeListener < // . >
Также в коде можно провести проверку на версию и выполнять код в зависимости от условия:
if (android.os.Build.VERSION.SDK_INT >= 19) < // . >
Что нового в Android 13
Летом 2021 года началась подготовка к новой версии Android 13 (рабочее название Tiramisu). 15 августа 2022 года вышла финальная версия. О новинках версии ищите на сайте Гуглятины.
Что нового в Android 12
18 февраля 2021 года объявили о выходе новой версии Android 12 (Android S Preview, рабочее название Snow Cone).
Появилась удобная поддержка RenderEffect из коробки, применимая к компонентам: Blur, Desaturate, Color Filter.
Что нового в Android 11
19 февраля 2020 года Гугл официально создала на сайте раздел для новой версии Android 11 (рабочее название Red Velvet Cake).
Что нового в Android 10
3 сентября 2019 года вышла финальная версия Android 10, которая в бета-версии называлась Android Q (рабочее название Quince Tart). Теперь разработчики отказались от сладких названий в пользу чисел. Оно и понятно, у котов девять жизней.
Больше нельзя запустить Activity, когда ваше приложение находится в фоновом режиме. Рекомендуемый подход: создавать уведомление, запускающее активность.
Отменён доступ к идентификаторам устройства, по которым можно было определить его уникальность. Так, Mac-адрес теперь рандомизирован, а IMEI (TelephonyManager.getDeviceId()) и серийный номер больше не доступны. Используйте сбрасываемые идентификаторы, такие как Advertising ID, Instance ID или Globally-unique ID (GUID).
Фоновое определение локации усложнилось. Система будет различать запросы местоположения, сделанные на переднем плане и в фоне. Запрос на разрешение доступа к местоположению теперь будет иметь 3 варианта: Разрешать все время, Разрешать только при использовании приложения (доступ только на переднем плане) и Запретить (нет доступа).
Что нового в Android 9 Pie
7 марта 2018 года вышла предварительная версия Android 9 P. 6 августа она получила полное название Pie (Пирог) Запись в блоге.
Indoor positioning with Wi-Fi RTT
Display cutout support
Improved messaging notifications
Multi-camera API
ImageDecoder for bitmaps and drawables
HDR VP9 Video, HEIF image compression, and Media APIs
Data cost sensitivity in JobScheduler
Neural Networks API 1.1
Autofill improvements
Open Mobile API for NFC payments and secure transactions
Что нового в Android 8.1 Oreo
25 октября 2017 вышла предварительная версия для разработчиков.
Android Go (для слабых устройств), Neural Networks API, Shared memory API.
Что нового в Android 8.0 Oreo
21 марта 2017 года впервые объявили о новой версии Android 8. 21 августа 2017 во время солнечного затмения вышла финальная версия.
Сначала была просто буква «O» в названии Android. Одно из основных предположений — популярное печенье Oreo. Предположение оправдалось.
Ограничение фоновых задач: Для сторонних программ установлены дополнительные ограничения, которые помогут уменьшить вред для аккумулятора от плохих программ. Например, приложения смогут получать всего несколько обновлений местоположения в час.
При этом, эти ограничения не распространяются на приложения, если:
- Приложение не в фоне
- Приложение имеет активный Foreground-сервис
- Другое Foreground-приложение имеет соединение с текущим (как через bind service, так и через content provider).
Получается, что пока для Foreground-приложений поведение будет таким же, как и раньше.
Если foreground service отсутствует, то запрос геолокации будет изменен:
Fused Location Provider (FLP) Для Background-приложений система будет определять новое местоположение только несколько раз в час, даже если приложение явно запросило больше обновлений. Для Foreground-приложений логика работы останется без изменений Geofencing Background-приложения смогут получать обновления от Geofencing API чаще, чем обновления от Fused Location Provider GNSS Measurements, GNSS Navigation Message. Для приложений, находящихся в фоне не будут приходить обновления для сервисов GnssMeasurement и GnssNavigationMessage Location Manager Для Background-приложений система будет определять новое местоположение только несколько раз в час.
Ограничение фоновых сервисов — После того как приложение перешло в background, у него есть «окно» в несколько минут, в течение которого сервисы могут запускаться и работать. После истечения этого интервала все сервисы останавливаются, а запуск новых будет приводить к падению приложения. Используйте JobScheduler и GcmNetworkManager.
В случае если необходимо выполнять длительные задачи в фоне, рекомендуется использовать foregroundService, который будет явно говорить пользователю, что приложение работает. Стоит обратить внимание, что после того как вызвали Context.startForegroundService() необходимо в течение 5 секунд вызвать startForeground(), в противном случае система может показать ANR.
Ограничение на регистрацию Broadcast в манифесте — оставлен небольшой список исключений, которым ещё можно использовать манифест. Остальным нужно вызывать Broadcast динамически.
Доработана система уведомлений. Уведомления от каждого приложения будут делиться на несколько каналов. То есть, если, например, приложение постоянно отправляет в шторку рекламу — ее можно будет отключить через системные настройки, а не копаясь в приложении. Также отдельное уведомление можно отложить. Оно убирается из шторки, но появится там через заданное время — полчаса, час и т. д.
Можно смотреть видео в маленьком окне. Также появились новые возможности работы с дополнительными дисплеями — удаленное управление и работа.
Новое изменение для лаунчеров — адаптивные иконки. Теперь миниатюрные изображения для приложений будут подстраиваться под выбранную пользователем тему и изменять свою форму с анимацией.
Появятся дополнительные возможности для разработчиков музыкальных приложений с помощью набора AAudio API. Обещают упростить работу с выводом и записью звука и повысить качество.
поддержка Bluetooth аудиокодека LDAC и технологии Wi-Fi Aware (ранее известная как Neighbor Awareness Networking), с помощью которой можно обмениваться информацией по Wi-Fi между устройствами без подключения к точке доступа.
API автозаполнения: пользователи теперь могут выбирать приложение для автозаполнения форм, аналогично тому, как они выбирают клавиатуру.
Ресурсы шрифтов в XML: шрифты теперь становятся полностью поддерживаемым типом ресурсом в Android O. Приложения могут использовать шрифты в XML-макетах, а также определять семейства шрифтов в XML – определяя стиль и весовой комплект шрифта вместе с файлами шрифтов.
Расширенная цветовая гамма для приложений: теперь разработчики могут создавать приложения с поддержкой расширенной цветовой гаммы для отображения на соответствующих дисплеях.
Поддержка навигации на клавиатуре: более надёжная и предсказуемая модель навигации при использовании клавиш «стрелки» и «табуляция».
Улучшения для WebView (просмотр веб-страниц в Android приложениях).
Оптимизация API для Java 8 и время выполнения.
У класса View появился новый метод setToolTipText(), позволяющий задать подсказку (а также getToolTipText()). Также подсказка доступна через XML-атрибут android:tooltipText. Появляется подсказка при долгом нажатии на компоненте, либо при прохождении указателя над ним (не удалось увидеть).
Подсказка может быть многострочной. Если числов символов будет больше 98, то текст подсказки будет обрезаться с выводом трёх точек.
Ожидается поддержка в библиотеке поддержки через ToolTipCompat.
ProgressDialog объявлен устаревшим.
Что нового в Android 7.1 (API 25)
5 декабря 2016 объявили о выходе Android 7.1.1.
В октябре 2016 сообщили о выходе Android 7.1 Developer Preview. Название Nougat сохранилось, поменялся только номер API 25. Константа N_MR1
App shortcuts API
Circular app icons support
Enhanced wallpaper metadata
Image keyboard support
Storage manager Intent
new APIs to support multi-endpoint calling and new telephony configuration options
Что нового в Android 7.0 Nougat (API 24)
9 марта 2016 вышла превью-версия Android 7.0 с названием N. 22 августа 2016 вышла финальная версия, которая получила название Nougat.
Поддержка Java 8 — лямбда, вискас и прочие плюшки языка.
Платформа Android 7.0 получила поддержку языка Java 8, которая требуют наличия нового компилятора Jack. Последняя версия Jack поддерживается только в Android Studio 2.1. Поэтому если вы хотите использовать возможности языка Java 8, вам понадобится Android Studio 2.1 и выполнить обновление до JDK 8.
Чтобы скомпилировать ваше приложение для платформы Android 7.0, необходимо использовать Java 8 Developer Kit (JDK 8), а для использования некоторых инструментов с Android Studio 2.1 необходимо установить Java 8 Runtime Environment (JRE 8).
Откройте проект в Android Studio, откройте окно Project Structure, выбрав File | Project Structure.
В левой панели окна щелкните SDK Location. В поле JDK Location укажите расположение Java 8 JDK (нажмите кнопку справа для просмотра своих файлов), затем нажмите OK.
Для использования API-интерфейсов Android 7.0 ваш проект должен быть сконфигурирован соответствующим образом.
Использование новых возможностей языка Java 8 не является обязательным требованием при разработке приложений для платформы Android 7.0. Если вы не хотите писать код с использованием возможностей языка Java 8, можно указать Java 7 в качестве значения совместимости для проекта, однако все-равно необходимо будет выполнить компиляцию с JDK 8 для осуществления сборки на платформе Android N.
В настоящее время Android поддерживает не все возможности языка Java 8. Однако при разработке приложений для Android 7.0 доступны следующие функции.
- Статические и заданные по умолчанию методы интерфейсов
- Лямбда-выражения
- Повторяющиеся примечания
Кроме того, доступны следующие API-интерфейсы для реализации возможностей языка Java 8.
API-интерфейсы отражения и языковых функций:
java.lang.FunctionalInterface;
java.lang.annotation.Repeatable;
java.lang.reflect.Method.isDefault();
а также API-интерфейсы отражения, связанные с повторяющимися примечаниями, например, AnnotatedElement.getAnnotationsByType(Class).
Вспомогательные API:
java.util.function.
В Android 7.0 реализация лямбда-выражений выполнена с помощью анонимных классов. Данный подход обеспечивает их обратную совместимость и возможность выполнения в предыдущих версиях Android. При тестировании лямбда-выражений в предыдущих версиях перейдите в файл build.gradle и установите для параметров compileSdkVersion и targetSdkVersion значения 23 или ниже.
Чтобы использовать возможности языка Java 8 и набор инструментов Jack для проекта, добавьте в файл модуля build.gradle следующий код:
android < . defaultConfig < . jackOptions < enabled true >> compileOptions < sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 >>
Обновление существующего проекта
Откройте файл build.gradle для своего модуля и укажите в нем следующие значения:
android < compileSdkVersion 'android-N' buildToolsVersion '24.0.0-rc1' . defaultConfig < minSdkVersion 'N' targetSdkVersion 'N' . >. >
Создание нового проекта
Чтобы создать новый проект разработки с использованием Android N Preview SDK выполните следующие действия.
Выберите File | New Project и выполняйте указания, пока не перейдете на страницу «Target Android Devices». На этой странице выберите вариант Phone and Tablet. В разделе Phone and Tablet перейдите в список Minimum SDK и выберите N: Android API 23, N Preview (Preview).
В Android N удалены три неявных широковещательной рассылки с целью оптимизации потребления памяти и энергии: CONNECTIVITY_ACTION, ACTION_NEW_PICTURE и ACTION_NEW_VIDEO.
Приложения для Android N не получают широковещательные рассылки CONNECTIVITY_ACTION, даже если в их манифесте указаны требования получения уведомлений об этих событиях. Приложения в активном режиме могут следить за событиями CONNECTIVITY_CHANGE в своем основном потоке, если они запрашивают уведомление через BroadcastReceiver.
Приложения не могут отправлять или получать широковещательные рассылки ACTION_NEW_PICTURE и ACTION_NEW_VIDEO. Эта оптимизация влияет на все приложения, включая те, которые не предназначены для Android N.
В будущих выпусках Android могут быть отменены другие неявные широковещательные рассылки, а также отменена привязка некоторых фоновых служб. Поэтому следует избегать зависимостей (или удалить их) в виде объявленных в манифесте получателей неявных широковещательных рассылок или фоновых служб.
Android предоставляет несколько решений, позволяющих отказаться от таких неявных широковещательных рассылок или фоновых служб. Например, в JobScheduler реализован надежный механизм планирования сетевых операций, который запускается при выполнении определенных условий, например при подключении к безлимитной сети. Вы можете даже использовать JobScheduler, чтобы реагировать на изменения поставщиков контента.
Разрешение GET_ACCOUNTS теперь считается устаревшим. Система игнорирует это разрешение для приложений, разработанных для Android N.
Android N позволяет пользователям установить параметр Display size, который увеличивает или уменьшает все элементы на экране, делая таким образом устройство более удобным для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее sw320dp (ширина экрана Nexus 4, обычного телефона среднего размера).
При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами.
Если приложение предназначено для API уровня 23 или ниже, система автоматически завершает все его фоновые процессы. Это означает, что если пользователь переходит из такого приложения на экран Settings и изменяет параметр Display size, то система завершает работу приложения таким же образом, как в случае нехватки памяти. Если у приложения имеются процессы, работающие в активном режиме, система уведомляет эти процессы об изменении конфигурации согласно описанию в документе Обработка изменений в режиме выполнения, как в случае изменения ориентации устройства.
Если приложение разработано для Android N, все его процессы (активные и фоновые) уведомляются об изменении конфигурации, как это описано в документе Обработка изменений в режиме выполнения.
Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии, что эти приложения соответствуют рекомендациям по разработке для Android.
В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить следующие параметры специальных возможностей на новом устройстве: Magnification gesture, Font size, Display size и TalkBack. В результате этого изменения становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки на экране Settings > Accessibility.
Процесс приложения, запущенного под Android N, но разработанного для API более низкого уровня, завершается, если пользователь изменяет размер экрана. Приложение должно корректно обработать такой сценарий. В противном случае оно завершится с ошибкой, если пользователь запустит его с экрана последних задач.
Вы должны протестировать свое приложение и убедиться, что оно не будет работать подобным образом. Для этого можно вызвать аналогичную ошибку, принудительно завершив процесс приложения через DDMS.
Приложения для N и последующих версий Android не завершаются автоматически при изменении плотности экрана, однако они могут плохо реагировать на изменения конфигурации.
Приложения для Android N должны уметь корректно обрабатывать изменения конфигурации и не должны завершаться с ошибкой при последующих запусках. Вы можете проверить поведение приложения, изменив размер шрифта (Setting > Display > Font size) и перезапустив затем приложение с экрана последних задач.
Android N обеспечивает расширенную поддержку многоязычных пользователей, позволяя им выбирать в настройках из нескольких языковых стандартов. Эта возможность реализована в Android N за счет значительного увеличения числа поддерживаемых языковых стандартов и изменения способа разрешения ресурсов в системе. Подробнее об этом
В Android N приложения могут использовать новые API-интерфейсы для запроса доступа к конкретным каталогам внешнего хранилища, включая каталоги на съемных носителях, таких как SD-карты. Новые API-интерфейсы значительно упрощают доступ к стандартным каталогам внешнего хранилища, таким как Pictures. Например, приложения, работающие с фотографиями, могут использовать эти API-интерфейсы вместо READ_EXTERNAL_STORAGE, который разрешает доступ ко всем каталогам хранилища или платформы Storage Access Framework, благодаря чему выполняется переход к указанному каталогу. Кроме того, новые API-интерфейсы упрощают процедуру предоставления доступа к внешнему хранилищу для приложения. Если вы применяете новые API, система использует простой интерфейс разрешений, в котором четко указаны каталоги, к которым приложение запрашивает доступ. Дополнительная информация содержится в документации для разработчиков Доступ к выделенным каталогам.
Multi-window — новый атрибут манифеста android:resizableActivity со значением true позволяет запускать активность в специальном режиме разбиения экрана. Вы можете указать минимальный размер. Также появился ещё один атрибут android:supportsPictureInPicture для режима Картинка-в-картинке.
Direct reply notifications: RemoteInput notification API впервые появились в Android Wear. Теперь доступно для телефонов и планшетов.
Bundled notifications — можно использовать новый метод Notification.Builder.setGroup() для группировки уведомлений.
Что нового в Android 6.0 Marshmallow
Версия Android 6.0 (API 23) получила название Marshmallow. Одна японская фирма выпускает сладости из marshmallow в виде котиков, которых кладут в кофе. Учитывая, что логотипом Java является кружка с кофе, можно сделать вывод, что новая версия Android по-прежнему дружит с Java.
О новой превью-версии объявили 28 мая 2015 года на Google I/O. Финальная версия прилетела мне на Nexus 7 11 ноября 2015 года, пока котик спал.
Android Pay и отпечатки пальцев
Для внедрения платёжной системы Android Pay требовалось два компонента, работающих на уровне системы: NFC, внедренный версии Android 2.3, и эмуляция банковских карт, которая появилась в версии Android 4.4. Появился Fingerprints API — еще один компонент безопасной и простой системы, который позволяет работать с биометрическими данными на уровне ОС.
Вместе Android 6 и Android Pay позволяют пользователям подтверждать покупки (как в розничных сетях, так и в Google Play) одним прикосновением к сканеру отпечатков пальцев. С добавлением поддержки отпечатков на системном уровне в Android M пользователи смогут обезопасить себя от несанкционированных покупок, разблокировать телефон и отдельные приложения; а разработчики — использовать универсальные системные API для работы с биометрической авторизацией в своих приложениях, причём работать это будет на всех поддерживаемых системой устройствах и сканерах.
Android 6.0 Marshmallow позволит разработчикам использовать системные API для работы со всевозможными датчиками биометрической авторизации, а разработчикам приложений обращаться к данным датчикам с помощью этих API и не городить велосипеды из костылей. Зачем вводить сложный пароль, когда можно просто приложить палец?
С помощью класса android.hardware.fingerprint.FingerprintManager проверяем наличие в устройстве сенсора isHardwareDetected(), запрашиваем разрешение USE_FINGERPRINT, и если у пользователя есть откатанные пальчики hasEnrolledFingerprints(), показываем стандартный диалог авторизации по отпечатку authentificate().
Confirm Credentials
Теперь у нас есть возможность перепроверить, что сейчас устройство в руках у его владельца, показав экран разблокировки перед важным действием в приложении, например, при попытке открыть папку «отдых с киской 2011».
Расширение памяти
Некоторые пользователи сталкивались с ситуацией, когда их устройство сообщало о недостатке памяти на накопителе, не смотря на то, что SD-карта имеет ещё достаточное количество свободного места. Теперь Android 6 умеет монтировать SD-карты как «продолжение» встроенного накопителя, тем самым избавляя пользователей от необходимости вручную переносить приложения, кэши тяжелых игрушек или ещё какой-нибудь контент на карту памяти. Кроме того, файлы, которые хранятся на SD-карте в режиме Flex Storage зашифрованы, и могут быть прочитаны только на том устройстве, к которому была привязана карта памяти. Безопасность и удобство.
Text Selection
Теперь контекстное меню для действий с выделенным текстом появляется непосредственно рядом с кареткой. Для добавления своих действий мы так же можем воспользоваться меню, описанным в menu.xml, и добавить его с помощью метода startActionMode(Callback, ActionMode.TYPE_FLOATING).
Встроенный перевод Google Translate
Пользователи, у которых установлено приложение Google Translate, получат возможность перевода на 90 языков внутри некоторых приложений на любом устройстве под управлением Android 6.0, Marshmallow.
Приложения, которые используют встроенную функцию выделение текста (см. выше), встроенный перевод будет уже включен по умолчанию, поэтому никаких дополнительных шагов делать не нужно. Разработчикам, которые реализовали собвственное выделение текста для своих приложений, могут легко реализовать функцию встроенного перевода, выполнив следующие шаги:
private Intent createProcessTextIntent() < return new Intent() .setAction(Intent.ACTION_PROCESS_TEXT) .setType("text/plain"); >
Просканировать с помощью PackageManager все пакеты, которые имеют фильтр PROCESS_TEXT (например: com.google.android.apps.translate — если он установлен).
private List getSupportedActivities()
Добавить их в качестве MenuItems в окно выбора у TextView.
public void onInitializeMenu(Menu menu) < // Start with a menu Item order value that is high enough // so that your "PROCESS_TEXT" menu items appear after the // standard selection menu items like Cut, Copy, Paste. int menuItemOrder = 100; for (ResolveInfo resolveInfo : getSupportedActivities()) < menu.add(Menu.NONE, Menu.NONE, menuItemOrder++, getLabel(resolveInfo)) .setIntent(createProcessTextIntentForResolveInfo(resolveInfo)) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); >>
Метки для каждого элемента можно получить через код:
resolveInfo.loadLabel(mPackageManager);
Намерение для каждого элемента можно создать, используя фильтр
private Intent createProcessTextIntentForResolveInfo(ResolveInfo info)
Добавление параметра перевода в меню выбора текста вашего приложения (если вы не используете поведение выделения текста в Android по умолчанию ) делается просто и занимает всего несколько дополнительных строк кода. В процессе перевода, ваше приложение должно удерживать выделение текста, пока Google Translate работает.
Voice Interaction
Приложение, будучи запущенным из Google Now, может вести диалог с пользователем с помощью класса android.app.VoiceInteractor.
Устаревшее
Если вы используете устаревший Apache Http client, то нужно добавить в build.gradle:
android
Из SDK удалили OpenSSL: libcrypto.so и libssl.so заменены на BoringSSL.
Удалён старый метод для уведомлений notification.setLatestEventInfo(), используйте Notification.Builder.
Из Android Keystore provider убрали поддержку DSA-шифрования.
Разное
Доступ к мак-адресам устройств в округе теперь возможен только при сканировании методами WifiManager.getScanResults(), BluetoothLeScanner.startScan() и при запрошенных разрешениях ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION. А вот методы WifiInfo.getMacAddress() и BluetoothAdapter.getAddress() вернут всегда значения 02:00:00:00:00:00. Это сделано в целях повышения безопасности пользователя.
Теперь состояния WifiConfiguration-объектов наши приложения могут менять только, если они сами их создали.
У камеры изменения по работе с доступом к сервису. Если приложение ушло в фон, а другое приложение наоборот вышло на первый план, то ему отдастся приоритет, а первое лишится сервиса. Теперь можно использовать из разных приложений одновременно доступ к разным камерам устройства.
- App Linking
- Auto Backup for Apps
- Authentication
- Fingerprint Authentication
- Direct Share
- Voice Interactions
- Assist API
- Notifications
- Bluetooth Stylus Support
- Improved Bluetooth Low Energy Scanning
- Hotspot 2.0 Release 1 Support
- 4K Display Mode
- Themeable ColorStateLists
- Audio Features
- Video Features
- Camera Features
- Flashlight API
- Reprocessing API
- Android for Work Features
Изменения в API
Type | Additions | Changes | Removals | Total |
---|---|---|---|---|
Packages | 4 | 52 | 28 | 84 |
Classes and Interfaces | 121 | 236 | 27 | 384 |
Constructors | 3 | 0 | 2 | 5 |
Methods | 510 | 123 | 28 | 661 |
Fields | 403 | 81 | 39 | 523 |
Total | 1041 | 492 | 124 | 1657 |
Что нового в Android 5.0 Lollipop
12 ноября 2014 года официально вышла новая версия Android 5.0 под кодовым названием Lollipop.
Ещё во время конференции Google I/O, компания заявила, что Lollipop (Леденец) — это самый масштабный релиз для Android: разработчиков ожидает более 5000 новых API. Lollipop разработана для пользователя, который постоянно пользуется несколькими устройствами: телефоном, планшетом, телевизором и т. д. С новой ОС переключение с одного экрана на другой будет происходить незаметно: запустит последнее из открытых приложений, позволит продолжить поиск, начатый на другом устройстве Android и т.д.
Интерфейс Lollipop получил название Material Design. Также можно самостоятельно установить ограничение доступности, чтобы принимать звонки только от определенных людей и видеть только важные уведомления (они будут появляться даже на заблокированном экране).
В новой ОС предусмотрен режим экономии аккумулятора, который может продлить его заряд еще на 90 минут. А чтобы личные данные пользователя всегда оставались в безопасности, в Android Lollipop есть функция входа с нескольких аккаунтов, а также гостевой режим. Более того, можно дополнительно защитить свое устройство с помощью ПИН-кода, пароля или графического ключа, а также связав его с другим устройством, например, часами или автомобилем (функция Smart Lock).
На этой странице будет собираться новая информация, которая пригодится разработчикам.
- A New Design — Material Design
- A New Runtime — ART (Android Runtime)
- Enhanced Notifications
- Project Volta- Increased Efficiency
- Support for OpenGL ES 3.1
- Android Extension Pack
- Camera API for advanced camera capabilities
- Storage — Directory selection
- Multiple network connections
- Bluetooth broadcasting
- NFC enhancements
- Scheduling jobs — Пример
- Enterprise — Managed provisioning
- Render PDF as bitmap
- Testing and accessibility improvements
- Easier switching between input languages
Изменения в API
Type | Additions | Changes | Removals | Total |
---|---|---|---|---|
Packages | 8 | 43 | 0 | 51 |
Classes and Interfaces | 87 | 232 | 0 | 319 |
Constructors | 84 | 2 | 0 | 86 |
Methods | 408 | 69 | 17 | 494 |
Fields | 754 | 22 | 1 | 777 |
Total | 341 | 368 | 18 | 1727 |
Новые пакеты
- android.app.job
- android.bluetooth.le
- android.hardware.camera2
- android.hardware.camera2.params
- android.media.session
- android.media.tv
- android.service.voice
- android.system
Добавлена новая ADB-команда dumpsys batterystats:
adb shell dumpsys batterystats --charged
Появились новые виды уведомлений, которые можно выводить на экран блокировки через метод setVisibility(), используя константы.
- VISIBILITY_PRIVATE — базовый случай: значок, не показывая содержимое уведомления
- VISIBILITY_PUBLIC — показывает содержимое уведомления
- VISIBILITY_SECRET — ничего не показывает
Экран недавно запущенных программ переименовали в Overview и добавили API для управления своей программой в этом экране.
Компонент WebView теперь использует движок Chromium и может обновляться без обновления самой системы, а при обновлении браузера.
Новый API android.media.browse позволяет просматривать медиа-содержимое других приложений. Класс MediaBrowserService позволяет использовать медиа совместно с классом MediaBrowser.
Появились два новых класса для управления проигрыванием. Класс MediaSession заменил RemoteControlClient. Класс MediaController позволяет создать свой контроллер.
Два новых сенсора: Tilt Detector и Heart Rate Sensor.
Захват экрана для скриншотов доступен через android.media.projection. Используйте VirtualDisplay.
У камеры появились новые возможности в новом пакете android.hardware.camera2.
Поддержка Bluetooth Low Energy доступна через android.bluetooth.le.
Улучшена работа с NFC.
Класс PdfRendered позволяет рендерить Bitmap из PDF-документов.
А не козёл ли, пользователь?
Переработан метод isUserAGoat(). Подробнее читайте в моей статье А не козёл ли ты, пользователь?
В коде при использовании новых возможностей делайте проверку.
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) < // Call some material design APIs here >else < // Implement this feature without material design >
Для старых устройств доступна библиотека совместимости для работы с Material Design и поддержки компонентов CardView и RecyclerView.
Обнаружен секретный пакет com.android.internal.telephony.cat, содержащий различные классы для работы с котами, например CatService. Из студии пакет недоступен. Свободу кошакам!
Полезные ссылки
Что нового в Android 4.4 KitKat
Вышла новая версия Android 4.4 под кодовым названием KitKat. А счастье было так близко (((.
На самом деле планировалось название Kitekat (корм для энергичных кошек), но секретарша-дура сделала опечатку в документах. А когда заметили ошибку, то было уже поздно исправлять. Но мы-то с вами знаем правду.
Новый Toast. Теперь банановый закруглённый. Ничего менять не надо.
Добавлены новые флаги для скрытия системных панелей в новом режиме погружения.
Новые способы анимаций для компонентов — Android: Transition в Android 4.4
Новый механизм взаимодействия с контент-провайдерами для работы с документами — Storage Access Framework
В Android 4.4 компонент WebView использует новый движок от Chromium. Прирост производительности впечатляет. От 5 до 354%.
Появилось понятие программы по умолчанию для работы с SMS и MMS.
Уровень 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
Android API Levels
This is an overview of all Android versions and their corresponding identifiers for Android developers. Anyone is welcome to open an issue or pull request. Happy developing!
Definitions
Gradle files
Kotlin variable | Groovy variable | Definition |
---|---|---|
minSdk | minSdkVersion | The minimum SDK version your app will support, defined in build.gradle . For example, if your minSdk is 26, this SDK version corresponse to API Level 26 and Android 8, so your app will only run on devices with Android 8 or higher. |
targetSdk | targetSdkVersion | The SDK version that your app targets, defined in build.gradle . This should always be the same as compileSdk . |
compileSdk | compileSdkVersion | The SDK version that your app compiles against, defined in build.gradle . Android Studio uses this SDK version to build your AABs and APKs. This should always be the same as targetSdk . |
Code files
Variable | Definition |
---|---|
Build.VERSION.SDK_INT | The SDK version of the Android OS currently running on the user’s device. For example, on a device running Android 11, this value will be 30 (aka Build.VERSION_CODES.R ), even if the target and compile SDK of the app is different. |
Footnotes
- Cumulative usage distribution figures were last updated on August 9, 2023 using data from Statcounter GlobalStats and this script. These figures may have changed significantly since the last update. You may update the figures yourself with a pull request. ↩
- The codenames for Android 10 and above in the table are the internal codenames. Beginning with Android 10, Google dropped the usage of codenames publicly. ↩
- Android 4.4W is the first Android release for Android Wear. ↩
- The years represent the year of first stable release of each version. The release dates are from android.os.Build.VERSION_CODES including later versions’ years from the Official Android blog (12, 12L, 13, 14) ↩
See also
- Build.VERSION_CODES official reference
- Codenames, Tags, and Build Numbers