Перенос приложений на 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. Он указан в диспетчере SDK в разделе Android API 28 как Google API 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 вносит изменения в платформу Android, которые могут повлиять на поведение вашего приложения или вообще сломать его, даже если вы не измените 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

Вы можете получить пакеты SDK для создания своего приложения на Android 9 с помощью 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, в том числе путем передачи FD.

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

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