В 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 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 внесены изменения, которые могут повлиять на работу приложения или даже привести к его сбою, даже если вы не меняете 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 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…