Кратко о нововведениях Android 14 для разработчиков

Android 14 (API 34) ужесточает приватность и фоновые сценарии, вводит более гранулярный доступ к медиа, строгие требования к foreground‑сервисам и уведомлениям — первым шагом обновите targetSdk до 34 и прогоните ключевые сценарии на устройстве с Android 14.

Ключевые изменения, которые могут "сломать" поведение

  • Новая грануляция медиа‑разрешений и выбор отдельных файлов: не ждите полного доступа к галерее после одобрения. Всегда проверяйте доступность Uri перед чтением.
  • Фоновые ограничения: операции с местоположением, сенсорами и некоторыми медиа‑операциями запрещены вне активного UI без оправданного foreground‑сервиса или job.
  • Foreground services: нужно корректно указывать категорию сервиса (media, location, dataSync и т.д.); универсальные FGS под всё подряд — риск.
  • Запуск активностей из фона сильно ограничен — UI должен запускаться по явному действию пользователя.
  • Видимость пакетов и установка: сканирование установленных приложений и sideload теперь требует дополнительных деклараций; старые targetSdk могут блокироваться.
  • Scoped Storage и работа с файлами: ещё меньше возможностей для прямого доступа к путям, больше — через MediaStore и SAF.

Если код ожидает «постоянный» доступ к медиа по умолчанию — он сломается. Подготовьте UX для случаев частичного доступа и отказа пользователя.

Практические рекомендации и конкретные шаги

  1. Обновление сборки
    • Установите targetSdkVersion = 34, соберите и запустите тесты на эмуляторе/реальном устройстве Android 14.
  2. Медиа и файлы
    • Переведите операции на MediaStore и Storage Access Framework; при использовании SAF сохраняйте и проверяйте takePersistableUriPermission.
    • Не кэшируйте «сырые» пути к файлам — держите Uri и корректно обрабатывайте их ревокацию.
  3. Фоновая работа
    • Используйте WorkManager / JobScheduler для фоновых задач; применяйте foreground‑service только с корректной категорией и обоснованием.
    • Отложите или реструктурируйте периодические сканы, требующие доступа к чувствительным данным.
  4. Уведомления
    • Запрашивайте permission на отправку уведомлений в момент, когда их ценность очевидна; настройте отдельные каналы и приоритеты.
  5. Безопасность и видимость пакетов
    • Проверьте манифест на queries и explicit intent‑фильтры; адаптируйте логику, завязанную на списке установленных приложений.
  6. Логирование и диагностика
    • Реализуйте свой приватный логгер для критичных событий, минимизируйте хранение чувствительных данных в логах.
  7. Тестирование
    • Прогоните ключевые сценарии: отказ разрешений, частичный доступ к файлам, агрессивное завершение фоновых процессов, переключение сетей.

Стратегия «WorkManager + четко категorizованные foreground‑services» — самая безопасная для совместимости с Android 14.

Миграция: краткий чек‑лист

  • [ ] Поменять targetSdkVersion на 34 и собрать сборку.
  • [ ] Протестировать UI и фоновые сценарии на устройстве с Android 14.
  • [ ] Переписать доступ к файлам через MediaStore/SAF; обработать частичные разрешения.
  • [ ] Реализовать корректные notification channels и runtime‑запрос уведомлений.
  • [ ] Уточнить категории foreground‑services и заменить некорректные FGS на WorkManager, где возможно.
  • [ ] Проверить package visibility и установки/обновления внутри приложения.
  • [ ] Подготовить план отката/флагов фич для поэтапного развёртывания.

Частые ошибки

  • Запрос всех разрешений при старте — высокий шанс отказа от пользователя.
  • Кэширование абсолютных путей к файлам вместо хранения Uri.
  • Использование FGS без указания или с неправильной категорией.
  • Полагание на системные логи для диагностики в продакшене.

FAQ

  • В: Нужно ли обязательно обновлять targetSdk до 34? О: Рекомендуется — многие новые политики работают только при targetSdk=34; старые targetSdk могут ограничиваться системой при установке.
  • В: Как обрабатывать частичный доступ к фото/видео? О: Всегда проверяйте доступность Uri, покажите пользователю понятный UX для выбора дополнительных файлов или объясните, зачем нужен полный доступ.
  • В: Можно ли заменить все foreground‑services на WorkManager? О: Нет, для длительного воспроизведения медиа или задач, требующих привилегированного статуса, FGS остаются, но их нужно правильно категоризовать и минимизировать использование.

Этот план даёт практическую дорожную карту для перехода на Android 14: начните с обновления targetSdk, затем последовательно адаптируйте медиа‑доступ, фоновую логику и уведомления, тестируя реальные сценарии на устройствах с API 34.