Что означает ошибка 0x80000103
Эта ошибка появляется, когда Android не может проверить цифровую подпись приложения при попытке установить или обновить APK. Код 0x80000103 обычно означает SIGNATURE_VERIFY_FAILED — система обнаружила несоответствие между подписанным файлом и тем, что ожидает операционная система. Ошибка блокирует установку и может появляться сразу после перетасовки файлов, при переносе между устройствах или после пересборки проекта без сохранения настроек подписи.
Ошибка часто сопровождается сообщением в консоли Android Studio:
Installation failed with signature 0x80000103 error
Это означает, что подпись либо повреждена, либо не проходит проверку на соответствие версиям versionCode и versionName.
Причины возникновения
Причины ошибки подписи обычно конкретны и связаны с управлением ключами:
- Поврежденный keystore — файл хранилища ключей мог быть поврежден при копировании или перемещении между системами.
- Истек срок действия ключа — если дата
validityистекла, Android отклоняет подпись как устаревшую. - Несоответствие versionCode — при каждой новой сборке versionCode должен увеличиваться. Если вы попытались установить APK с тем же versionCode и другой подписью, система заблокирует установку.
- Неверная настройка signingConfig — в
build.gradleмогут быть указаны не те параметры keystore или ключа, что приведет к генерации APK с другой подписью. - Перенос APK без сохранения подписи — передача APK по почте или мессенджерам часто приводит к изменению байтов файла, что ломает подпись.
Способы решения
Способ 1: Переподпись через интерфейс Android Studio
Самый простой путь для разработчиков, использующих официальный редактор. Откройте проект в Android Studio, перейдите в меню Build → Generate Signed Bundle / APK → APK. Выберите существующий модуль и нажмите Create new key или выберите уже имеющийся keystore. Введите пароли и путь к файлу, затем нажмите Finish. Сгенерированный APK установится на устройство без ошибок проверки подписи.
Способ 2: Подписать APK через командную строку apksigner
Если вам нужно подписать файл без открытия Android Studio, используйте инструмент apksigner, который идет в комплекте с SDK. Откройте терминал в директории с вашим APK и выполните:
apksigner sign --ks my-release-key.jks --ks-pass pass:mykeystorepassword my-app.apk
Команда заменит подпись на новую, соответствующую указанному keystore. Убедитесь, что versionCode в манифесте увеличился по сравнению с предыдущей версией, иначе установка все равно будет заблокирована.
Способ 3: Пересборка проекта с исправлением signingConfig
Если ошибка повторяется, проверьте файл app/build.gradle. Убедитесь, что блок signingConfigs и buildTypes настроены верно:
android {
signingConfigs {
release {
storeFile file('my-release-key.jks')
storePassword 'mykeystorepassword'
keyAlias 'mykeyalias'
keyPassword 'mykeypassword'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
// другие настройки...
}
}
}
После изменений выполните clean rebuild: ./gradlew clean assembleRelease. Это пересоберет APK с правильными настройками подписи, сбросив старые кэши, которые могли вызывать конфликт.
Профилактика
Чтобы избежать повторной ошибки подписи:
- Храните keystore в надежном месте (например, в парольном менеджере или защищенном хранилище CI/CD), никогда не отправляйте его вместе с APK.
- Всегда увеличивайте
versionCodeпри каждой новой сборке, даже если изменения косметические. - Настройте автоматическую подпись в системах непрерывной интеграции (GitHub Actions, GitLab CI), чтобы ручной этап был исключен.
- Периодически проверяйте даты validity ключа и перегенерируйте его за 30 дней до истечения срока, чтобы не попасть в ситуацию с истекшим сертификатом.
- Используйте одни и тот же keystore для всех версий приложения (debug и release), чтобы система распознавала обновления корректно.
⚠️ Важно: Не удаляйте старый keystore после генерации новой подписи, если у вас есть пользователи, установленные на старой версии. Для обновления им потребуется новая версия с incremented versionCode и совместимой подписью.
💡 Совет: Если вы тестируете приложение на устройстве, используйте режим подписи debug — Android автоматически подписывает такие сборки, и проверку подписи проходить не требуется.