Подпись

Подпись APK

Обновлено:

Каждый APK подписан ключом разработчика. Удостоверяющего центра здесь нет: Android не выясняет, кто выпустил сертификат, и разработчик вправе подписать приложение ключом, который создал сам. Зато система строго следит, чтобы все обновления были подписаны тем же ключом, что и установленная версия.

На этой странице

Схемы подписи

СхемаПоявиласьЧто защищаетГде хранится
v1 (JAR)с первых версий Androidотдельные файлы архива; служебные структуры ZIP не защищеныфайлы MANIFEST.MF и .SF внутри архива
v2Android 7.0весь файл, включая структуру ZIPблок подписи перед центральным каталогом ZIP
v3Android 9то же самое, а также история смены ключатот же блок
v3.1Android 13смену ключа, которая действует только на новых версиях системытот же блок
v4Android 11потоковую установку через adb install --incrementalотдельный файл .apk.idsig

Подпись v4 не самостоятельна: ей обязательно нужна парная подпись v2 или v3. Устройства с Android 6.0 и более ранних версий распознают только v1, поэтому приложения, поддерживающие старые системы, подписываются сразу несколькими схемами.

Обновление с другой подписью

При установке обновления система сравнивает сертификаты новой и установленной версий. Если они совпадают — обновление устанавливается, а данные сохраняются. Если не совпадают — установщик отказывает в обновлении; при установке через adb это выглядит как ошибка INSTALL_FAILED_UPDATE_INCOMPATIBLE. Штатного способа установить такую сборку поверх имеющейся нет: остаётся удалить старую версию вместе с её данными и установить новую как отдельное приложение.

Легитимный способ сменить ключ всё же существует — ротация в схеме v3. В новую подпись встраивается цепочка, где старый сертификат удостоверяет новый, и такое обновление устанавливается как обычное.

Важно

Отсюда практический вывод. Если «новая версия», скачанная со стороннего сайта, не устанавливается из-за конфликта подписей, это повод остановиться: файл подписан не тем ключом, что установленная программа, а значит, скорее всего, собран не разработчиком.

Как посмотреть подпись

Утилита apksigner из пакета Android SDK Build Tools проверяет подпись и показывает сертификаты:

Терминал · Windows, macOS, Linux
apksigner verify --print-certs -v app.apk

Флаг --print-certs выводит сведения о сертификатах, -v включает подробный отчёт, в том числе о том, какими схемами файл подписан. Сравните отпечатки сертификатов установленной и новой версий: если они совпадают, конфликта подписей не будет.

Источники