В Android 9 (уровень API 28) представлены новые функции и API, которыми вы можете воспользоваться в своих приложениях, а также новые изменения в поведении. В этом документе представлен обзор шагов по переносу ваших приложений на Android 9 в два ключевых этапа:
- Обеспечьте базовую совместимость с Android 9.
Убедитесь, что ваше существующее приложение полностью функционально на новой версии платформы. На этом этапе вы не используете новые API и не меняете
targetSdkVersion
вашего приложения, но могут потребоваться незначительные изменения. - Ориентируйтесь на новую платформу, скомпилируйте с помощью 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, которые могут повлиять на поведение вашего приложения или вообще сломать его, даже если вы не измените targetSdkVersion
. По этой причине важно просмотреть ключевые изменения, указанные в таблице 1, и протестировать любые исправления, которые вы вносите с учетом этих изменений.
Изменять | Краткое содержание |
---|---|
Ограничения на интерфейсы, отличные от 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 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 представлен список этих изменений со ссылками на дополнительную информацию.
Изменять | Краткое содержание |
---|---|
Разрешение службы переднего плана | Приложения, желающие использовать службы переднего плана, теперь должны сначала запросить разрешение 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» .