Введение / Зачем это нужно
Цифровая подпись APK-файла — это криптографическая метка, которую разработчик добавляет в приложение перед публикацией. Она гарантирует, что:
- Приложение не было изменено после подписания (целостность).
- Приложение действительно выпущено указанным разработчиком (аутентичность).
Проверка подписи актуальна, когда вы:
- Скачиваете APK из неофициальных источников и хотите убедиться в его безопасности.
- Отлаживаете собственное приложение и нужно подтвердить, что сборка подписана правильным ключом.
- Разбираетесь в проблемах установки (например, ошибка
INSTALL_PARASE_FAILED_NO_CERTIFICATES).
Этот гайд покажет, как быстро проверить подпись любого APK-файла на Android-устройстве или компьютере.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Android-устройство или APK-файл на компьютере.
- Установленный ADB (Android Debug Bridge). Входит в Android SDK Platform-Tools. После установки добавьте папку
platform-toolsв переменную средыPATH. - Включённая отладка по USB на устройстве (Настройки → Для разработчиков → Отладка по USB).
- Базовые навыки работы с командной строкой (терминал, cmd, PowerShell).
💡 Совет: Если вы проверяете APK, который уже лежит на компьютере, ADB и устройство не нужны. Достаточно утилит
apksignerилиjarsigner.
Пошаговая инструкция
Шаг 1: Подготовьте среду и устройство
- Подключите Android-устройство к компьютеру через USB.
- Откройте терминал (Linux/macOS) или PowerShell/cmd (Windows).
- Проверьте, что ADB видит устройство:
В списке должен появиться ваш devices с статусомadb devicesdevice. Если нет — установите драйверы (Windows) или разрешите отладку на устройстве.
Шаг 2: Определите путь к APK-файлу
Если APK на устройстве:
- Найдите пакет приложения (например,
com.example.app). Полный путь к APK можно получить командой:
Вывод будет примерно таким:adb shell pm list packages -f | grep "com.example.app"package:/data/app/com.example.app-1/base.apk. Это и есть путь.
Если APK на компьютере:
- Просто найдите файл. Например,
C:\Downloads\app.apkили~/Downloads/app.apk.
Шаг 3: Проверьте подпись с помощью apksigner (рекомендуется)
Утилита apksigner входит в Android SDK Build-Tools (начиная с версии 24.0.0). Она поддерживает все современные схемы подписи (v1, v2, v3).
Выполните команду, заменив <путь_к_apk> на реальный путь:
apksigner verify --verbose <путь_к_apk>
Пример для APK на компьютере:
apksigner verify --verbose ~/Downloads/myapp.apk
Пример для APK на устройстве (сначала скопируйте его на компьютер):
adb pull /data/app/com.example.app-1/base.apk .
apksigner verify --verbose base.apk
Ожидаемый вывод при успехе:
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
...
Если вы видите Verifies и true для хотя бы одной схемы — подпись корректна.
Шаг 4: Альтернатива: проверка через jarsigner
Если apksigner недоступен (например, в очень старых SDK) или нужно проверить только старую схему подписи (v1), используйте jarsigner — инструмент из Java Development Kit (JDK).
jarsigner -verify -verbose -certs <путь_к_apk>
Пример:
jarsigner -verify -verbose -certs base.apk
Ожидаемый вывод:
jar verified.
...
Если в конце есть jar verified. — подпись v1 верна.
⚠️ Важно:
jarsignerне проверяет схемы v2/v3. Даже еслиjarsignerпрошёл успешно, APK может быть неподписан по v2, что вызовет ошибку на устройствах Android 7.0+.
Шаг 5: Проанализируйте результат
- Успех: Вывод содержит
Verified(apksigner) илиjar verified.(jarsigner). Подпись действительна, файл не изменён. - Ошибка "No signatures found": Файл не подписан вообще. Такие APK не устанавливаются на Android.
- Ошибка "certificate not found" или "signature block not found": Подпись повреждена или файл изменён после подписания.
- Предупреждения о просроченном сертификате: Подпись технически действительна, но срок действия сертификата истёк. На установку обычно не влияет, но может быть проблемой для обновлений.
Проверка результата
После выполнения команд вы должны получить чёткий ответ. Самый надёжный показатель — фраза Verified using v2 scheme от apksigner. Она гарантирует, что приложение пройдёт проверку на всех современных Android-устройствах (7.0+).
Если проверка прошла успешно, вы можете быть уверены:
- APK не был модифицирован неизвестными лицами.
- Приложение originates от владельца приватного ключа, использованного для подписи.
Возможные проблемы
ADB не видит устройство
- Убедитесь, что отладка по USB включена.
- Попробуйте переподключить кабель или использовать другой порт.
- На Windows проверьте, установлены ли драйверы ADB (через
adb kill-serverиadb start-server).
apksigner/jarsigner не найдены
- Убедитесь, что Android SDK Build-Tools (для
apksigner) или JDK (дляjarsigner) установлены и добавлены вPATH. - Полный путь к
apksignerобычно:~/Library/Android/sdk/build-tools/<версия>/apksigner(macOS/Linux) илиC:\Users\<user>\AppData\Local\Android\Sdk\build-tools\<версия>\apksigner.bat(Windows).
Ошибка "Failed to read key from APK"
- APK-файл может быть повреждён или зашифрован. Попробуйте скачать/собрать его заново.
- Убедитесь, что вы передаёте путь именно к APK-файлу, а не к ZIP-архиву или другому формату.
Сертификат подписи просрочен
- Это не блокирует установку, но может помешать обновлению приложения через Google Play, если новый билд подписан тем же ключом с просроченным сертификатом.
- Решение: переподпишите приложение новым ключом (требует изменения ключа обновления, что не всегда возможно).