Что важно знать разработчику: краткий ответ
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 и упрощает миграцию фоновой логики.
Влияние на ключевые подсистемы и практические советы
- Background execution
- Переведите polling на WorkManager/JobScheduler; если нужна немедленная работа при получении события — используйте FCM high priority.
- Тесты: Battery Saver ON, симуляция low usage, изменение Standby bucket через adb.
- Уведомления
- Создайте каналы при старте приложения, предлагайте пользователю настройку важности; обрабатывайте случаи, когда канал отключён.
- Камера/микрофон/сенсоры
- Не пытайтесь открывать их из фоновых BroadcastReceiver/Service. Если запись нужна в фоне — стартуйте foreground service с видимым уведомлением и явным согласием пользователя.
- Скрытые API
- Запустите статический анализ и StrictMode на тестовой сборке; замените reflection на публичные аналоги или документируйте зависимость и ищите официальный баг‑ридер.
- Сеть и безопасность
- Проверьте 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 вызовов и проблем миграции — пришлите артефакты.