Android, найти все места в коде для запроса разрешений
Я работаю над приложением для устройств предварительного зефира. Исходный код не был написан мной, а сам проект довольно большой.
В настоящее время я делаю приложение запрашивать разрешения при необходимости.
Вопрос: как найти все места в коде, где нужно запрашивать разрешение?
Я использую Android Studio.
ИЗМЕНИТЬ
Некоторые люди предлагают изменить api на 23 и просто запустить приложение и посмотреть места, где он сбой.
Проблема в том, что приложение не разбивается на все места.
Например, запуск этого кода без разрешения приведет к сбою приложения:
TelephonyManager manager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Пока этот только возвращает пустой массив, а не сбой.
final String[] SELF_PROJECTION = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,};
Cursor cursor = context.getContentResolver()
.query(ContactsContract.Profile.CONTENT_URI, SELF_PROJECTION, null, null, null);
Кроме того, Android Lint не показывает эти места. Я не уверен, что это должно быть.
Ответы
Ответ 1
Согласно странице разработчика относительно разрешений безопасности:
Однако почти во всех случаях в системный журнал печатается сбой разрешения.
Итак, запустите приложение и выполните поиск в журнале для "разрешений" или аналогичного.
Используйте модульное тестирование для обеспечения охвата всех мест в коде, где могут потребоваться разрешения.
Ответ 2
Добавить
lintOptions {
enable 'MissingPermission'
}
в build.gradle
. Это покажет предупреждения после создания вашего приложения.
Ответ 3
Конечно, скомпилируйте таргетинг api 23, не добавляйте в код разрешений, запустите приложение и посмотрите, где он сбой.
Как только вы начнете определять местоположения, затем переходите к разрешениям (через настройки приложения), чтобы вы могли пройти мимо этого экрана, а затем отбросить их, чтобы вы могли увидеть, сработает ли он.
Logcat довольно описательный, позволяя вам знать, что разрешения запрещены...
Ответ 4
Вы можете сделать этот трюк: удалить опасные разрешения из манифеста. Таким образом, вы можете протестировать практически на любом устройстве, вы будете уверены, что он потерпит крах, и вы найдете точные места, где вам нужны эти разрешения. Вот как я это сделал.
Ответ 5
Запросить все разрешения, необходимые при первом запуске вашего приложения.
Это не Best Practices, но это ответ этого вопроса.