Как понять, какие разрешения запрашивает Android‑приложение (uses-permission и uses-feature)
Короткий ответ: извлечь AndroidManifest.xml из APK и посмотреть теги uses-permission и uses-feature — это даст точный список запрошенных разрешений и требуемых аппаратных/программных фич. Ниже — практическая инструкция и критерии оценки.
Что такое uses-permission и uses-feature
uses-permission — элемент AndroidManifest.xml, который декларирует, какие системные разрешения (камера, микрофон, контакты, сеть) нужны приложению. uses-feature описывает аппаратные или программные возможности устройства (например, android.hardware.camera, android.hardware.nfc) и может иметь required="true", что блокирует установку на устройства без этой фичи. Вместе они определяют, что приложение может делать и на каких устройствах будет доступно.
Прямой список permissions и features в манифесте — единственный надёжный способ понять требования приложения без установки.
Как извлечь и прочитать AndroidManifest.xml из APK
APK — это ZIP. Последовательность простых шагов:
- Переименуйте app.apk → app.zip и распакуйте, либо откройте архив любым архиватором.
- Внутри найдёте AndroidManifest.xml — он в бинарном формате, его нужно распарсить.
- Утилиты:
- aapt (в составе Android SDK Platform-Tools): aapt dump xmltree app.apk AndroidManifest.xml
- aapt dump badging app.apk — короткий список permissions и фич.
- Android Studio → APK Analyzer — визуальный просмотр.
- Для автоматизации: androguard или другие Python‑библиотеки парсят манифест и дают JSON.
Примеры команд:
- aapt dump xmltree app.apk AndroidManifest.xml | grep -E "uses-permission|uses-feature"
- aapt dump badging app.apk | grep permission
Если у вас нет aapt, установите Android SDK Platform-Tools — там есть необходимые инструменты для любой ОС.
Как интерпретировать найденные теги (практические правила)
- Каждая строка uses-permission: name="android.permission.X" — явно запрошенное разрешение.
- uses-feature с required="true" означает, что приложение предназначено только для устройств с этой фичей.
- Обращайте внимание на небуквенные или системные права: signature, privileged — это признак системного приложения или подделки в пользовательском APK.
Таблица: категории разрешений и риск
Категории разрешений и риск
| Категория | Примеры | Риск |
|---|---|---|
| normal | INTERNET, ACCESS_NETWORK_STATE | Низкий — система даёт автоматически |
| dangerous | CAMERA, RECORD_AUDIO, READ_CONTACTS, LOCATION | Средний — пользователь должен подтвердить |
| signature / privileged | SYSTEM_ALERT_WINDOW (в системных сборках) | Высокий — должен быть только у системных приложений |
| special | REQUEST_INSTALL_PACKAGES, MANAGE_EXTERNAL_STORAGE | Критический — требует явного объяснения и часто блокируется в маркете |
Практические сигналы риска:
- MANAGE_EXTERNAL_STORAGE или REQUEST_INSTALL_PACKAGES без очевидной функциональности — красный флаг.
- SYSTEM_ALERT_WINDOW в обычном приложении — подозрительно.
- Большое количество непонятных разрешений (особенно signature/privileged) — возможно, модифицированный APK или malware.
Игнорирование пометки signature|privileged для пользовательских приложений — частая ошибка. Это может указывать на подмену или на то, что APK рассчитан на прошитые ROM.
Быстрая проверка популярных сценариев
- Хотите понять, запрашивает ли приложение доступ к камере и микрофону:
- Ищите android.permission.CAMERA и android.permission.RECORD_AUDIO, а также uses-feature android.hardware.camera/required="true".
- Нужна ли геолокация — android.permission.ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION.
- Проверка на трекеры: ищите зависимости и сторонние библиотеки в manifest или в разрешениях, но полная оценка требует статического анализа ресурсов и кода.
Инструменты для автоматизации
- Android Studio APK Analyzer — удобен для ручного анализа.
- androguard (Python) — парсит APK и позволяет выдавать таблицы и отчёты.
- Онлайн‑сканеры дают быстрые отчёты, но не размещайте приватные APK в сомнительных сервисах.
Частые ошибки
- Доверять только списку разрешений в магазине: разработчики могут скрывать дополнительные permissions в собранном APK.
- Оценивать риск исключительно по количеству разрешений — важно смотреть назначение и соответствие функционалу.
- Игнорировать uses-feature required=true — это влияет на доступность приложения на устройствах.
FAQ
- Нужно ли бояться каждого dangerous‑разрешения?
- Нет. Многие permissions оправданы: камера — для фото, запись — для голосовых сообщений. Сомнения возникают, если разрешение не соответствует заявленной функции.
- Можно ли удалить лишние permissions из APK?
- Вручную — сложно и может сломать приложение. Правильный путь — установить приложение из доверенного источника или выбрать альтернативу.
- Как понять, где именно в коде используется разрешение?
- Это требует статического анализа: поиск вызовов API в decompiled коде или использование инструментов вроде JADX/androguard.
Если нужно, могу прислать готовый скрипт на Python для массовой проверки списка APK и вывода подозрительных разрешений.