Начиная с 31 августа 2024 года, Google Play вводит следующие правила для разработчиков:
- Новые приложения и обновления: Все новые приложения и обновления существующих приложений должны быть нацелены на Android 14 (API уровень 34), чтобы их можно было опубликовать в Google Play. Исключение составляют приложения для Wear OS и Android TV, которые должны быть нацелены на Android 13 или выше.
- Существующие приложения: Чтобы приложения оставались доступными для новых пользователей на устройствах с более новыми версиями Android, они должны быть нацелены на Android 13 (API уровень 33) или выше. Приложения, нацеленные на Android 12 (API уровень 31) или ниже (Android 10 или ниже для Wear OS и Android 11 или ниже для TV OS), будут доступны только на устройствах с версиями Android, соответствующими или ниже целевого API уровня приложения.
- Продление срока: Если вам нужно больше времени для обновления вашего приложения, вы можете запросить продление до 1 ноября 2024 года. Формы для продления будут доступны в Play Console в этом году.
В этой статье мы рассмотрим основные шаги, которые помогут вам успешно выполнить это обновление.
1. Ограничения на использование SCHEDULE_EXACT_ALARM
Если ваше приложение уже было обновлено до API level 33, то дополнительные действия не требуются. Если же нет, ознакомьтесь с ограничениями для API level 33 по ссылке в официальной документации.
2. Требования к типам foreground services
Теперь ваше приложение должно указывать хотя бы один тип foreground service для каждого foreground service. Это нужно для того, чтобы система могла правильно распознавать и обрабатывать разные сценарии использования. Например:
<service
android:name=".YourForegroundService"
android:foregroundServiceType="location" />
Для получения подробной информации об новых типах foreground service и миграции к WorkManager, если ваш случай не поддерживается, смотрите официальную документацию.
3. Обновления OpenJDK 17
Android 14 обновляет основные библиотеки для поддержки Java 17. Это может повлиять на совместимость вашего приложения. Особенно обратите внимание на изменения в работе с регулярными выражениями и использование ProGuard.
Изменения в регулярных выражениях
Неправильные ссылки на группы больше не допускаются. Тестируйте ваше приложение, чтобы избежать исключений IllegalArgumentException.
Проблемы с ProGuard
Из-за добавления класса java.lang.ClassValue могут возникнуть проблемы при использовании ProGuard. Убедитесь, что классы, унаследованные от java.lang.ClassValue, корректно обрабатываются.
4. Ограничения для implicit и pending intents
Теперь implicit intents будут доставляться только экспортируемым компонентам. Убедитесь, что все ваши implicit intents отправляются корректно:
val explicitIntent = Intent("com.example.action.APP_ACTION").apply {
package = context.packageName
}
context.startActivity(explicitIntent)
Проверьте все ваши pending intents и укажите компонент или пакет.
5. Регистрация broadcast receivers
При регистрации broadcast receivers через контекст, теперь обязательно указывать флаг RECEIVER_EXPORTED или RECEIVER_NOT_EXPORTED. Исключение составляют ресиверы, получающие только системные широковещательные сообщения.
6. Безопасная загрузка динамического кода
Все динамически загружаемые файлы должны быть помечены как только для чтения. Например:
val jar = File("DYNAMICALLY_LOADED_FILE.jar")
val os = FileOutputStream(jar)
os.use {
jar.setReadOnly()
}
val cl = PathClassLoader(jar, parentClassLoader)
Удалите и пересоздайте существующие файлы, чтобы избежать исключений.
7. Дополнительные ограничения на запуск активностей из фона
Для запуска активностей из фона необходимо явно указать, что ваше приложение имеет такие привилегии. Используйте для PendingIntent
setPendingIntentBackgroundActivityStartMode(
MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
и флаг BIND_ALLOW_ACTIVITY_STARTS для bindService.
8. Частичный доступ к фото и видео
Теперь пользователи могут предоставлять частичный доступ к своей медиа библиотеке. Используйте новый permission READ_MEDIA_VISUAL_USER_SELECTED для запроса частичного доступа. Например:
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
Если ваше приложение уже использует фото-пикер, никаких изменений не требуется.
9. Другие изменения
Обязательно проверьте все остальные изменения, перечисленные в официальной документации, чтобы убедиться, что ваше приложение полностью совместимо с API level 34.
10. Обновите targetSdkVersion
После внесения необходимых изменений обновите targetSdkVersion до 34 в файле build.gradle:
android {
compileSdkVersion 34
defaultConfig {
targetSdkVersion 34
}
}
Следуя этим шагам, вы сможете успешно обновить ваше приложение до API level 34 и обеспечить его соответствие новым требованиям Google Play.