Если бы я хотел исследовать, как и где разрешения [запрошенные в Mainfest.xml] использовались в приложении Android для целей их удаления, есть ли простой способ сделать это? Предлагают ли lint или findbugs какую-то поддержку для отслеживания разрешений, используемых/злоупотребляемых в проекте?
Очистите неиспользуемые разрешения Android
Ответы (7)
Я пришел из будущего, чтобы спасти ваши жизни.
Здесь (в будущем) LINT проверяет отсутствующие разрешения, как вы можете видеть в проверках LINT.
- Итак, перейдите в свой
AndroidManifest.xml
и удалите все теги<uses-permission>
используя разрешения Android (имеется в виду, не удаляйте разрешения, принадлежащие вашему приложению, такие какUA_DATA
иC2D_MESSAGE
). - Затем запустите LINT-анализ. Нажмите
Analyze
, затемInspect Code...
- Смотрите под
Android -> Constant and Resource Type Mismatches
- Вы должны увидеть все отсутствующие разрешения.
- Затем вы можете просто щелкнуть их правой кнопкой мыши и выбрать
Apply fix "Add Permission"
. Если вы выберете эту опцию, Android Studio будет включать одно разрешение для каждой ошибки. Таким образом, вы получите несколько копий одного и того же разрешения в файле манифеста, просто удалите дубликаты. Вы можете сделать это и вручную.
Вот описание правила LINT:
Идентификатор типа ресурса
Описание
В ходе этой проверки рассматриваются вызовы Android API, снабженные различными аннотациями поддержки (такими как RequiresPermission или UiThread), и помечаются все вызовы, которые не используют API должным образом, как указано в аннотациях. Примеры ошибок, отмеченных этой проверкой:
- Передача целого числа ресурсов неправильного типа (например, R.string) в API, который ожидает другой тип (например, R.dimen).
- Забыть вызвать переопределенный метод (через супер) в методах, которые требуют этого
- Вызов метода, требующего разрешения, без объявления этого разрешения в манифесте
- Передача ссылки на цвет ресурса в метод, который ожидает целочисленное значение RGB.
...и многое другое. Дополнительные сведения см. в документации по адресу http://developer.android.com/tools/debugging/annotations.html
Я использую Android Studio 2.1.2.
В файле манифеста вашего приложения у вас должна быть вкладка "Объединенный манифест", где вы можете увидеть свой окончательный манифест и разрешения, которые вы запрашиваете, вы можете щелкнуть разрешение, чтобы увидеть, откуда оно пришло. (кто это добавил - ex': sdk или из какого кода это произошло)
Также есть простой способ удалить разрешение, добавив в манифест:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
tools:node="remove" />
Также не забудьте добавить инструменты вверху:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="...">
То, как я сделал бы это для приложения, для которого я не писал код, состояло бы в том, чтобы удалять разрешения одно за другим и каждый раз тестировать приложение от начала до конца. Когда это не удается, сузьте его. В противном случае это разрешение не может быть использовано.
Вам придется попробовать удалить их один за другим и проверить, работает ли приложение нормально. Линтом это никак не проверяется (должно быть).
Когда они вернутся (в настоящее время они недоступны), вы можете загрузить свой apk на этот веб-сайт (если это вас устраивает) и позволить им статически проанализировать используемые вами разрешения: http://www.android-разрешения.org/
Лучший способ — понять, что могут на самом деле делать. Если он когда-либо собирается использовать камеру, вы знаете, что вам нужно разрешение камеры.
Взгляните на http://developer.android.com/reference/android/Manifest.permission.html найдите разрешение, которое вы использовали в своем Mainfest
Или вы можете просто узнать, что делает ваше приложение, а затем просмотреть разрешения и посмотреть, какие из них являются дополнительными. Что делает ваше приложение, какие функции телефона оно использует. Где-то должна быть какая-то документация о том, что он должен делать и какие методы там есть.