Подтвердить что ты не робот

Как проверить, действительно ли используется разрешение Android?


Я поддерживаю одно существующее (очень огромное, очень чувствительное) приложение для Android.

На днях я получил письмо от моего клиента, что приложение может объявлять разрешения, которые активно не используются.

Например, они хотят, чтобы я удалил разрешение "WRITE_EXTERNAL_STORAGE".
Я удалил его и скомпилировал и запустил приложение. Нет НИКАКОЙ ошибки вообще.

Но, просто из-за этого, я не думаю, что могу предположить, что разрешение активно не используется вообще.

Мой вопрос "Есть ли в любом случае я могу легко и просто проверить разрешение, если оно активно используется?"

Откровенно говоря, я не хочу проходить каждый маленький подробный аспект этого приложения, чтобы точно оценить разрешение или нет.
У меня просто нет времени.

Моя цель - проверить, активно ли разрешено использование. Если нет, удалите разрешение.
Надеюсь, что для этого есть меньше времени.

Привет

4b9b3361

Ответ 1

В Android Studio 1.3 и Android Support Library v7: 22.2.0 у вас есть решение для этого.

Шаги:

  • Обновление Android Studio до версии V1.3
  • Обновите свою библиотеку поддержки Android до версии 7: 22.2.0
  • Запустите Android Lint (Analyze → Inspect Code), в Lint Error см. раздел "Android → Constant и тип ресурса MisMatch", который показывает все методы, требующие разрешения.

Объяснение

  • Android внесла новую аннотацию @requirespermission.
  • Все методы SDK, требующие разрешения, аннотируются с помощью @requirespermission.
  • Когда мы вызываем какой-либо метод sdk, который требует разрешения без надлежащей проверки, есть ли у нас разрешение или нет, студия Android выполнит ошибку lint.

Ответ 2

В Berkeley есть группа, которая написала статью о разрешениях на Android. Они говорят о чрезмерных разрешениях и разработали инструмент под названием Stowaway, который проанализировал ваш APK для неиспользуемых разрешений. Анализ был основан на вызовах API API и их собственном сопоставлении разрешений, необходимых для каждого вызова API (подробнее см. В документе). Инструмент выдает флаг, если в манифесте есть разрешение, которое не сопоставляется ни с одним из вызовов API, найденных в APK.

Некоторое время веб-версия инструмента была доступна в http://www.android-permissions.org/, но это из эпохи пряников и никогда не обновлялся. Теперь на странице предлагается использовать PScout.

PScout делает лучшую работу, чем Stowaway при создании карт разрешений. Однако PScout не включает анализатор APK, поэтому вам придется вручную сопоставлять сопоставления, которые они предоставляют, с вызовами API, выполненными вашим приложением. К сожалению, если вас интересуют карты для версий, выходящих за рамки 5.1.1, вам придется сгенерировать их самостоятельно, используя предоставленный код PScout и собственный источник Framework.

Вы также можете проверить различные анализаторы APK здесь, чтобы узнать, включают ли они функциональность, которую вы ищете.

Ответ 3

Я попробовал метод, предложенный Вастантом, но он не работает для меня. На самом деле, потому что мой проект имеет ароматы и Code Inspection не работает для проекта с ароматами. См. https://code.google.com/p/android/issues/detail?id=210073.

Но работает Running Lint с консоли. Таким образом, шаги просты:

  • Удалить разрешения из вашего манифеста.
  • Запустите Lint для аромата, как описано здесь fooobar.com/questions/96368/....
  • Открыть результат Линта и найти раздел "Правильность" > "Ошибка MissingPermission: отсутствующие разрешения". Он будет содержать все вызовы, требующие разрешения.

Ответ 4

Начиная с Android Studio 3.3, запуск Analyze → Inspect Code будет информировать вас о пропущенных разрешениях в Android → Lint → Correctness → Missing Permissions