Переход на Android 8.0

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

  1. Обеспечьте совместимость с Android 8.0.

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

  2. Обновите целевую версию и используйте функции Android 8.0.

    Когда вы будете готовы воспользоваться новыми функциями платформы, обновите targetSdkVersion до 26, убедитесь, что приложение продолжает работать должным образом, а затем начните использовать новые API.

Обеспечьте совместимость с Android 8.0.

Целью здесь является убедиться, что ваше существующее приложение работает на Android 8.0 как есть (уровень API 26). Поскольку некоторые изменения платформы могут повлиять на поведение вашего приложения, могут потребоваться некоторые корректировки, но вам не нужно использовать новые API или менять targetSdkVersion .

Шаг за шагом обеспечьте совместимость с Android 8.0.

Подготовьте устройство под управлением Android 8.0.

  • Если у вас есть совместимое устройство (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P или Nexus Player), следуйте инструкциям по прошивке вашего устройства .
  • Или загрузите образ системы Android 8.0 для эмулятора Android. Он указан в диспетчере SDK под Android 8.0 как Google API Intel x86 Atom System Image .

    Примечание. Образ системы Android 8.0 доступен для загрузки из Android Studio 3.0 и более поздних версий. Для получения дополнительной информации см. раздел ниже, чтобы получить Android 8.0 SDK .

Выполнить тестирование совместимости

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

Однако есть еще один аспект тестирования: Android 8.0 вносит изменения в платформу Android, которые могут повлиять на поведение вашего приложения или вообще сломать его, даже если вы не измените targetSdkVersion . По этой причине важно просмотреть ключевые изменения, приведенные в таблице 1, и протестировать любые исправления, которые вы вносите с учетом этих изменений.

Таблица 1. Ключевые изменения, которые затрагивают все приложения, работающие на устройствах Android 8.0.

Изменять Краткое содержание Дальнейшая ссылка
Менее частые фоновые обновления местоположения. Если ваше приложение получает обновления местоположения от фоновой службы, оно получает обновления на Android 8.0 (уровень API 26) реже, чем на более старых версиях Android. В частности, фоновая служба не может получать обновления местоположения чаще, чем несколько раз в час. Однако пока ваше приложение находится на переднем плане, скорость обновления местоположения не меняется. Ограничения фонового местоположения
net.hostname больше не поддерживается Запрос системного свойства net.hostname дает нулевой результат. Никто
Новое исключение из send(DatagramPacket) Метод send(DatagramPacket) выдает исключение SocketException , если ранее выполненный метод connect(InetAddress, int) завершился неудачно. Изменения в поведении: подключение к сети и HTTP(S).
Правильное NullPointerException из методов AbstractCollection AbstractCollection.removeAll(null) и AbstractCollection.retainAll(null) теперь всегда вызывают исключение NullPointerException ; ранее NullPointerException не вызывалось, если коллекция была пустой. Это изменение приводит поведение в соответствие с документацией. Изменения в поведении: обработка коллекций
Правильное NullPointerException из Currency.getDisplayName(null) Вызов Currency.getDisplayName(null) вызывает исключение NullPointerException . Изменения поведения: локали и интернационализация

Более подробный список изменений поведения в Android 8.0 (уровень API 26) см. также в разделе «Изменения поведения Android 8.0» .

Обновите целевую версию и используйте функции Android 8.0.

В этом разделе объясняется, как включить полную поддержку Android 8.0 (уровень API 26), обновив targetSdkVersion до версии 26 и добавив новые функции, доступные в Android 8.0.

Помимо предложения вам новых API, Android 8.0 вводит некоторые изменения в поведении при обновлении targetSdkVersion до версии 26. Поскольку некоторые изменения поведения могут потребовать изменения кода во избежание поломок, вам следует сначала понять, как на ваше приложение может повлиять изменение targetSdkVersion с помощью просмотр всех изменений поведения приложений, ориентированных на Android 8.0 .

Примечание. Описанные выше шаги для обеспечения совместимости платформы являются обязательным условием для ориентации вашего приложения на Android 8.0, поэтому обязательно выполните эти шаги в первую очередь.

Обновите целевую версию и используйте функции Android 8.0 шаг за шагом.

Получите Android 8.0 SDK

Вы можете получить пакеты SDK для создания приложения на базе Android 8.0 (уровень API 26), используя последнюю версию Android Studio (рекомендуется Android Studio 3.0 и более поздних версий). Android Studio 3.0+ включает инструменты, которые помогут вам использовать функции Android 8.0, такие как адаптивные значки и загружаемые шрифты . Если вам пока не нужны эти функции, вы можете использовать стабильную версию Android Studio 2.3.3 для создания приложения с Android 8.0 и использовать новые API.

Чтобы настроить любую версию Android Studio, выполните следующие действия:

  1. Запустите Android Studio и откройте диспетчер SDK, нажав Инструменты > Диспетчер SDK .
  2. На вкладке «Платформы SDK» установите флажок «Показать сведения о пакете» . Ниже предварительной версии Android 8.0 проверьте следующее:
    • Платформа Android SDK 26
    • Google API Intel x86 Atom System Image (требуется только для эмулятора)
  3. Перейдите на вкладку «Инструменты SDK» и отметьте все элементы, для которых доступны обновления (установите каждый флажок, отмеченный тире ). Сюда должны входить последние версии следующих необходимых элементов:
    • Инструменты сборки Android SDK 26.0.0
    • Инструменты платформы Android SDK 26.0.0
    • Android-эмулятор 26.0.0
  4. Нажмите «ОК» , чтобы установить все выбранные пакеты SDK.

Теперь вы готовы начать работу с Android 8.0.

Обновите конфигурацию сборки

Обновите compileSdkVersion , targetSdkVersion и версию библиотеки поддержки до последних доступных версий, например:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

Удалите приемники вещания из файла манифеста.

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

Широковещательные рассылки, на которые может реагировать только ваше приложение — явные широковещательные намерения и широковещательные рассылки, отправленные конкретно на имя пакета вашего приложения, — продолжают работать так же на Android 8.0.

Из этого нового ограничения есть исключения. Список неявных широковещательных рассылок, которые по-прежнему работают в приложениях, ориентированных на Android 8.0, см. в разделе Неявные широковещательные исключения .

Проверьте свое приложение для Android 8.0

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

Когда вы создаете свое приложение с targetSdkVersion , равным 26, существуют определенные изменения платформы, о которых вам следует знать. Некоторые из этих изменений могут существенно повлиять на поведение вашего приложения или даже полностью его сломать, даже если вы не реализуете новые функции в Android 8.0.

В Таблице 2 представлен список этих изменений со ссылками на дополнительную информацию.

Таблица 2. Ключевые изменения, влияющие на приложения, когда targetSdkVersion установлено значение 26.

Изменять Краткое содержание Дальнейшая ссылка
Конфиденциальность Android 8.0 (уровень API 26) не поддерживает использование системных свойств net.dns1, net.dns2, net.dns3 и net.dns4. Изменения поведения: конфиденциальность
Принудительное использование записываемых и исполняемых сегментов Для собственных библиотек Android 8.0 (уровень API 26) применяет правило, согласно которому данные не должны быть исполняемыми, а код не должен быть доступен для записи. Изменения поведения: собственные библиотеки
Проверка заголовка и раздела ELF Динамический компоновщик проверяет больше значений в заголовке ELF и заголовках разделов и завершается сбоем, если они недействительны. Изменения поведения: собственные библиотеки
Уведомления Приложения, предназначенные для версии SDK Android 8.0 (уровень API 26), должны реализовать один или несколько каналов уведомлений для отправки уведомлений пользователям. Обзор API: уведомления
Метод List.sort() Реализации этого метода больше не могут вызывать Collections.sort() , иначе ваше приложение выдаст исключение из-за переполнения стека. Изменения в поведении: обработка коллекций
Метод Collections.sort() В реализациях списка Collections.sort() теперь генерирует исключение ConcurrentModificationException . Изменения в поведении: обработка коллекций

Более подробный список изменений поведения в Android 8.0 (уровень API 26) см. в разделе «Изменения поведения Android 8.0» .

Чтобы узнать о новых функциях и API, доступных в Android 8.0 (уровень API 26), см. раздел «Функции и API Android 8.0» .