Перенос приложений на Android 9

В Android 9 (уровень API 28) появились новые функции и API, которые можно использовать в приложениях, а также изменения в поведении. В этом документе описаны основные этапы переноса приложений на Android 9.

  1. Обеспечьте базовую совместимость с Android 9

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

  2. Ориентируйтесь на новую платформу, компилируйте с помощью Android 9 SDK и создавайте приложения с функциями Android 9

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

Подготовка устройства с Android 9

Если у вас совместимое устройство, получите образ системы Android 9 для него от производителя. Заводские образы для устройств Pixel можно скачать здесь. Общие инструкции по прошивке образа системы приведены здесь.

Вы также можете скачать образ системы Android 9 для Android Emulator. Он указан в SDK Manager в разделе Android API 28 как API Google Intel x86 Atom System Image.

Примечание. Системный образ эмулятора Android 9 доступен для скачивания в Android Studio 3.1 и более поздних версиях. Максимальная совместимость обеспечивается в Android Studio 3.2. Подробнее о том, как получить Android 9 SDK…

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

Цель – убедиться, что существующее приложение работает в Android 9 без изменений. Некоторые изменения платформы могут повлиять на работу приложения, поэтому вам может потребоваться внести корректировки. Однако использовать новые API или менять targetSdkVersion не нужно.

Как обеспечить совместимость с Android 9

Проведите тестирование на совместимость

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

Однако есть и другой аспект тестирования. В Android 9 внесены изменения, которые могут повлиять на работу приложения или даже привести к его сбою, даже если вы не меняете targetSdkVersion. Поэтому важно ознакомиться с основными изменениями в таблице 1 и протестировать все исправления, которые вы внедряете для адаптации к изменениям.

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

Изменить Сводка
Ограничения для интерфейсов, не относящихся к SDK Доступ к определенным интерфейсам, не относящимся к SDK, теперь заблокирован, независимо от того, является ли он прямым, осуществляется через JNI или рефлексию. При попытке доступа к ограниченным интерфейсам возникают ошибки, например NoSuchFieldException и NoSuchMethodException. Подробную информацию можно найти в статье Ограничения на интерфейсы, не относящиеся к SDK.
Удаление поставщика криптографических услуг Начиная с Android 9, поставщик Crypto JCA удален. Вызовы SecureRandom.getInstance("SHA1PRNG", "Crypto") будут вызывать NoSuchProviderException.
Более строгий декодер UTF-8 В Android 9 декодер UTF-8 для языка Java стал строже и соответствует стандарту Unicode.
Доступ к камере, микрофону и датчикам заблокирован для неактивных приложений Приложения, работающие в фоновом режиме, больше не могут использовать камеру, микрофон и датчики SensorManager.

Более подробный список изменений в поведении всех приложений, работающих на Android 9, можно найти в документе об изменениях в поведении.

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

В этом разделе рассказывается, как включить полную поддержку Android 9, обновив targetSdkVersion до 28 и добавив новые функции, доступные в Android 9.

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

Примечание. Прежде чем настраивать таргетинг приложения на Android 9, выполните описанные выше действия, чтобы обеспечить совместимость с платформой.

Пошаговое руководство по обновлению целевой версии и использованию функций Android 9

Как получить Android 9 SDK

Чтобы создать приложение для Android 9, вы можете получить пакеты SDK с помощью Android Studio 3.1 или более поздней версии. Если вам пока не нужны новые функции Android 9 и вы хотите только выполнить компиляцию для этой версии платформы, используйте Android Studio 3.1. Android Studio 3.2 полностью поддерживает функции Android 9.

Протестируйте приложение для Android 9

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

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

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

Таблица 2. Основные изменения, которые затронут приложения, если для параметра targetSdkVersion задано значение 28.

Изменить Сводка
Разрешение на использование активных служб Теперь приложения, которые хотят использовать активные службы, должны сначала запросить разрешение FOREGROUND_SERVICE. Это обычное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению. Если запустить активную службу без разрешения, возникнет ошибка SecurityException.
Прекращение поддержки шифров Bouncy Castle В Android 9 прекращена поддержка нескольких шифров от поставщика Bouncy Castle в пользу шифров от поставщика Conscrypt. Вызовы getInstance(), запрашивающие у поставщика Bouncy Castle генерацию NoSuchAlgorithmException, приводят к ошибкам. Чтобы устранить ошибки, не указывайте поставщика в getInstance() (то есть запрашивайте реализацию по умолчанию).
Удаление прямого доступа к Build.serial Приложениям, которым требуется идентификатор Build.serial, теперь необходимо запрашивать разрешение READ_PHONE_STATE, а затем использовать новый метод Build.getSerial(), добавленный в Android 9.
Запрещенный обмен данными каталога WebView Приложения больше не могут использовать один каталог данных WebView для нескольких процессов. Если в приложении есть несколько процессов, использующих WebView, CookieManager или любой другой API в пакете android.webkit, то при вызове метода WebView вторым процессом произойдет сбой.
Доступ к каталогу данных приложения заблокирован SELinux Система применяет песочницы SELinux для каждого приложения с ограничениями SELinux для каждого приложения в каталоге личных данных каждого приложения. Прямой доступ к каталогу данных другого приложения по пути теперь запрещен. Приложения могут продолжать обмениваться данными с помощью механизмов IPC, в том числе передавая дескрипторы файлов.

Более подробный список изменений в поведении приложений, предназначенных для Android 9, можно найти в документации.

Подробнее о новых функциях и API в Android 9…