Как понять, какие разрешения запрашивает 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. Последовательность простых шагов:

  1. Переименуйте app.apk → app.zip и распакуйте, либо откройте архив любым архиватором.
  2. Внутри найдёте AndroidManifest.xml — он в бинарном формате, его нужно распарсить.
  3. Утилиты:
    • 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.

Таблица: категории разрешений и риск

Категории разрешений и риск

КатегорияПримерыРиск
normalINTERNET, ACCESS_NETWORK_STATEНизкий — система даёт автоматически
dangerousCAMERA, RECORD_AUDIO, READ_CONTACTS, LOCATIONСредний — пользователь должен подтвердить
signature / privilegedSYSTEM_ALERT_WINDOW (в системных сборках)Высокий — должен быть только у системных приложений
specialREQUEST_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 и вывода подозрительных разрешений.