В рамках наших постоянных усилий по созданию высококачественных приложений мы часто ищем области, куда можем инвестировать инструменты и ресурсы, которые дадут вам более ясную информациюо производительности.
В Android 11 мы представляем два новых инструмента: API аудита доступа к данным и причины выхода из процесса (Data Access Audit API/Process Exit Reasons), чтобы дать больше информации об этих проблемах.
Android поощряет разработчиков быть внимательными и предусмотрительными с доступом к личным данным. В Android 11 будет доступ к новым API, которые дадут больше информации в использовании личной и защищенной информации. Это может быть полезно, например, для больших приложений, которые могут иметь устаревший код, а также для тех, которые используют сторонние библиотеки или SDK.
Крупным приложениям может быть нелегко сопоставить использование личных данных.Первый API — это обратный вызов, позволяющий приложениям отслеживать использование данных, защищенных разрешениями среды выполнения, до кода, который запустил использование. Для получение уведомлений любое приложение может установить обратный вызов в AppOpsManager, который будет использоваться каждый раз, когда раздел кода использует личные данные, такие как получение обновлений местоположения. Можно создать определенную логику для отслеживания, приема и анализа данных.
API аудита доступа к данным в Android 11 помогает отслеживать использование личных данных в коде.Второй API ориентирован на сложные приложения с большим числом функций. Приложение социальной сети может иметь функции поиска друзей и пометки фотографий. Каждая из них использует подмножество конфиденциальных данных, например первая использует местоположение и контакты, а вторая — местоположение, контакты и камеру. В Android 11 вы можете создать новый объект Context, который позволит сопоставить подмножество кода приложения одной или нескольким функциям. Таким образом, в дальнейшем каждое использование разрешений будет прослеживаться до функций, связанных с контекстом.
Вы также можете увидеть эти API в действии в примере кода.
В дополнение к тому, чтобы помочь определить доступ к приватный данным, Android 11 включает в себя новые API, чтобы точно выявить эти не всегда тривиальные проблемы сбоя.
Пользователи также пишете в поддержку, что бывает трудно отследить причину прекращения работы приложений, которая может быть вызвана различными факторами: ANR (“Приложение не отвечает”), сбоем или пользователем, решившим принудительно остановить его. Для диагностирования причины, некоторые разработчики добавляют свой код, чтобы самим провести аналитику для улучшения работоспособности приложения.
Имея это в виду, мы нашли способ облегчить диагностическую часть.
Android 11 представляет новый API ActivityManager для представления информации за прошлые периоды, связанной с завершением процесса приложения.
Приложение может использовать это API для получения любой доступной диагностической информации о выходе из процесса в прошлом, например о том, вызвано ли завершение процесса ANR, проблемами с памятью или другими факторами.
Если приложение было прекращено из-за ANR, то ApplicationExitInfo.getTraceInputStream()
вернет InputStream в дамп трассировки стека приложения до завершения работы. Это особенно полезно в новых версиях ОС, где есть дополнительная сложность для извлечения следов ANR из-за соображений конфиденциальности и безопасности. После чтения из InputStream не забудьте закрыть его, чтобы избежать утечки ресурсов.
Кроме того, можно использовать новый метод ActivityManager.setProcessStateSummary()
для хранения информации о пользовательском состоянии. С его помощью можно сохранить произвольные данные процесса для отладки раздела кода, который вызывает сбой приложения. Для некоторых разработчиков знание о состоянии до завершения процесса также жизненно важно. Например, разработчик игры может захотеть узнать, на каком текущем игровом уровне находился пользователь до завершения процесса — обычный способ состоит в том, чтобы постоянно сохранять информацию в хранилище и читать при следующем запуске приложения. Обратите внимание, что размер входных данных очень ограничен. Любая сохраненная информация о состоянии процесса может быть получена с помощью метода ApplicationExitInfo.getProcessStateSummary()
.
Мы надеемся, что вы найдете эти дополнительные инструменты полезными для обеспечения большей конфиденциальности и стабильности ваших приложений. Чтобы узнать больше, ознакомьтесь с нашей документацией для разработчика по аудиту доступа к данным и API причин выхода из процесса.
Перевод статьи
Комментарии