Что важно знать разработчику: краткий ответ

Android 8 ввёл жёсткие правила для фоновых сервисов и notification channels; Android 9 усилил энергосбережение и приватность (App Standby Buckets, блокировка доступа к камере/микрофону в фоне), а также ограничил вызовы скрытых API и добавил BiometricPrompt и поддержку вырезов экрана. Для приложений это значит: пересмотреть фоновые задачи, уведомления, обращения к скрытым API и работу с сенсорами — и протестировать на реальных устройствах с Android 9.

Ключевые изменения и что делать прямо сейчас

  • Фоновые службы: startForegroundService вместо startService, переходить на JobScheduler/WorkManager для отложенной/периодической работы; для видимой длительной работы — foreground service + уведомление.
  • Notification channels: обязателен при targetSdk ≥ 26 — создайте смысловые каналы и настройте уровни важности.
  • App Standby Buckets: система меняет приоритеты фоновой работы (active → rare). Планируйте синхронизацию и используйте FCM для срочных событий.
  • Приватность сенсоров: в Android 9 запрещён доступ к камере/микрофону/некоторым сенсорам из фоновых/idle‑процессов — переместите эти операции в UI/foreground flow и добавьте проверки состояния.
  • Non‑SDK API: рефлексия в скрытые методы теперь часто блокируется или логируется — найдите и замените такие места на публичные API или Jetpack.
  • Биометрия и UI: мигрируйте на BiometricPrompt (или androidx.biometric); учитывайте display cutout и WindowInsets для корректного UI.

Полезно: используйте WorkManager — он абстрагирует поведение между версиями Android и упрощает миграцию фоновой логики.

Влияние на ключевые подсистемы и практические советы

  1. Background execution
  • Переведите polling на WorkManager/JobScheduler; если нужна немедленная работа при получении события — используйте FCM high priority.
  • Тесты: Battery Saver ON, симуляция low usage, изменение Standby bucket через adb.
  1. Уведомления
  • Создайте каналы при старте приложения, предлагайте пользователю настройку важности; обрабатывайте случаи, когда канал отключён.
  1. Камера/микрофон/сенсоры
  • Не пытайтесь открывать их из фоновых BroadcastReceiver/Service. Если запись нужна в фоне — стартуйте foreground service с видимым уведомлением и явным согласием пользователя.
  1. Скрытые API
  • Запустите статический анализ и StrictMode на тестовой сборке; замените reflection на публичные аналоги или документируйте зависимость и ищите официальный баг‑ридер.
  1. Сеть и безопасность
  • Проверьте Network Security Config, отключение cleartext и TLS‑настройки сервера; хотя TLS 1.3 по‑умолчанию в более поздних версиях, для Android 8/9 обеспечьте корректность TLS 1.2.

План миграции и чеклист (быстрое действие)

  • Обновить SDK Platform 28 и инструменты сборки.
  • Найти и убрать non‑SDK вызовы (static analysis, logcat).
  • Перевести фоновые задачи на WorkManager/JobScheduler.
  • Реализовать notification channels и протестировать UX.
  • Проверить доступ к камере/микрофону в фоновых сценариях; при необходимости — foreground service.
  • Мигрировать биометрию на BiometricPrompt / androidx.biometric.
  • Тестировать на реальных устройствах с Android 8 и 9: фон, уведомления, вырезы экрана, сетевые ограничения.
  • Включить расширенное логирование (Crashlytics) и мониторинг после релиза.

Некоторые ограничения Android 9 действуют даже если targetSdk ниже 28 (например, энергосбережение). Тестируйте на устройствах с Pie, а не только в эмуляторе.

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

  • Использование startService() из фона → IllegalStateException; нужен startForegroundService() + старт foreground внутри 5 секунд.
  • Открытие камеры/микрофона в background → SecurityException/ошибки; перенести в foreground flow.
  • Рефлексия в скрытые API → предупреждения или падения на Android 9.

FAQ

  • Нужно ли повышать targetSdk до 28 прямо сейчас?

    • Рекомендуется, но делайте это когда код приведён в соответствие: каналы уведомлений, обработка фоновых сервисов и замена скрытых API.
  • Поможет ли WorkManager во всех случаях?

    • Да для большинства отложенных/периодических задач; для долгих видимых операций нужен foreground service.
  • Как проверить Standby bucket приложения?

    • Используйте adb команды и ручные сценарии использования, чтобы симулировать rare/frequent поведение.

Если хотите, подготовлю детализированный чеклист для вашей кодовой базы или быстро проверю APK/Gradle‑файлы на предмет non‑SDK вызовов и проблем миграции — пришлите артефакты.