[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/android/creating-keystore-android":3,"mdc--jqxgx0-key":538,"mdc--jw50sl-key":549,"mdc--nke9e4-key":557,"mdc--in4vcq-key":565,"mdc--nt7qtr-key":573,"mdc-lqbx3z-key":581,"mdc-h5jui2-key":589,"mdc--ok7iae-key":597,"related-/guides/android/signing-apk-android-studio,/guides/android/migrating-to-app-bundle,/errors/android/keystore-not-found":605},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":475,"code":475,"createdAt":476,"description":477,"difficulty":478,"draft":479,"estimatedTime":480,"extension":481,"faq":482,"howToSteps":492,"howToTotalTime":508,"image":475,"keywords":509,"locale":517,"meta":518,"navigation":519,"path":520,"platform":521,"related":522,"section":526,"seo":527,"severity":475,"stem":528,"summary":529,"tags":530,"twitterCreator":475,"twitterSite":475,"type":536,"updatedAt":476,"__hash__":537},"content_ru/guides/android/creating-keystore-android.md","Создание Keystore для Android: пошаговая инструкция подписи APK",[7,8,9],"Android Studio 2023.1+","JDK 8+","Google Play Console","FixPedia Team",{"type":12,"value":13,"toc":464},"minimark",[14,19,23,31,35,38,58,62,65,99,113,117,120,190,193,228,231,235,238,268,273,277,284,292,295,311,315,359,370,374,377,396,415,419,460],[15,16,18],"h2",{"id":17},"введение-зачем-это-нужно","Введение / Зачем это нужно",[20,21,22],"p",{},"Keystore — это цифровая подпись, которая подтверждает авторство вашего приложения и гарантирует целостность кода. Магазины приложений, включая Google Play, требуют, чтобы каждая релизная сборка была подписана одним и тем же ключом. Если вы попытаетесь загрузить обновление с другим сертификатом, публикация будет отклонена, а пользователям придётся устанавливать приложение заново.",[20,24,25,26,30],{},"После выполнения этого гайда у вас появится готовый ",[27,28,29],"code",{},".jks"," файл, правильно настроенный для подписи, а также понимание, как безопасно его хранить и интегрировать в процесс сборки.",[15,32,34],{"id":33},"требования-подготовка","Требования / Подготовка",[20,36,37],{},"Перед началом убедитесь, что соблюдены базовые условия:",[39,40,41,49,52,55],"ul",{},[42,43,44,45,48],"li",{},"Установлен JDK 8 или новее (утилита ",[27,46,47],{},"keytool"," входит в его состав)",[42,50,51],{},"Доступ к терминалу (командная строка, PowerShell или Bash)",[42,53,54],{},"Менеджер паролей для надёжного хранения учётных данных",[42,56,57],{},"Выбранная директория с ограниченным доступом (желательно не в корневой папке проекта)",[15,59,61],{"id":60},"шаг-1-откройте-терминал-и-подготовьте-директорию","Шаг 1: Откройте терминал и подготовьте директорию",[20,63,64],{},"Запустите терминал и создайте отдельную папку для ключей. Хранить их рядом с исходным кодом или в открытых репозиториях запрещено.",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-bash shiki shiki-themes github-light github-dark","mkdir -p ~/android_keys\ncd ~/android_keys\n","bash","",[27,73,74,91],{"__ignoreMap":71},[75,76,79,83,87],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"sScJk","mkdir",[75,84,86],{"class":85},"sj4cs"," -p",[75,88,90],{"class":89},"sZZnC"," ~/android_keys\n",[75,92,94,97],{"class":77,"line":93},2,[75,95,96],{"class":85},"cd",[75,98,90],{"class":89},[100,101,102],"blockquote",{},[20,103,104,105,108,109,112],{},"💡 Совет: Если вы работаете в Windows, используйте ",[27,106,107],{},"mkdir android_keys"," и ",[27,110,111],{},"cd android_keys",". Путь можно разместить на отдельном логическом диске или в зашифрованном контейнере.",[15,114,116],{"id":115},"шаг-2-сгенерируйте-ключ-через-keytool","Шаг 2: Сгенерируйте ключ через keytool",[20,118,119],{},"Выполните команду создания пары ключей. Параметры ниже соответствуют современным стандартам безопасности Google Play.",[66,121,123],{"className":68,"code":122,"language":70,"meta":71,"style":71},"keytool -genkeypair -v \\\n  -keystore my_app_release.jks \\\n  -keyalg RSA \\\n  -keysize 2048 \\\n  -validity 10000 \\\n  -alias release_alias\n",[27,124,125,138,148,159,170,181],{"__ignoreMap":71},[75,126,127,129,132,135],{"class":77,"line":78},[75,128,47],{"class":81},[75,130,131],{"class":85}," -genkeypair",[75,133,134],{"class":85}," -v",[75,136,137],{"class":85}," \\\n",[75,139,140,143,146],{"class":77,"line":93},[75,141,142],{"class":85},"  -keystore",[75,144,145],{"class":89}," my_app_release.jks",[75,147,137],{"class":85},[75,149,151,154,157],{"class":77,"line":150},3,[75,152,153],{"class":85},"  -keyalg",[75,155,156],{"class":89}," RSA",[75,158,137],{"class":85},[75,160,162,165,168],{"class":77,"line":161},4,[75,163,164],{"class":85},"  -keysize",[75,166,167],{"class":85}," 2048",[75,169,137],{"class":85},[75,171,173,176,179],{"class":77,"line":172},5,[75,174,175],{"class":85},"  -validity",[75,177,178],{"class":85}," 10000",[75,180,137],{"class":85},[75,182,184,187],{"class":77,"line":183},6,[75,185,186],{"class":85},"  -alias",[75,188,189],{"class":89}," release_alias\n",[20,191,192],{},"Что делает команда:",[39,194,195,201,207,216,222],{},[42,196,197,200],{},[27,198,199],{},"-genkeypair",": создаёт пару закрытый/открытый ключ",[42,202,203,206],{},[27,204,205],{},"-keystore",": задаёт имя файла хранилища",[42,208,209,108,212,215],{},[27,210,211],{},"-keyalg",[27,213,214],{},"-keysize",": используют алгоритм RSA длиной 2048 бит (оптимальный баланс безопасности и производительности)",[42,217,218,221],{},[27,219,220],{},"-validity 10000",": устанавливает срок действия ~27 лет",[42,223,224,227],{},[27,225,226],{},"-alias",": уникальное имя ключа внутри файла (запомните его)",[229,230],"in-article-ad",{},[15,232,234],{"id":233},"шаг-3-заполните-метаданные-и-установите-пароли","Шаг 3: Заполните метаданные и установите пароли",[20,236,237],{},"После запуска терминал запросит данные в интерактивном режиме. Отвечайте последовательно:",[239,240,241,244,251,258],"ol",{},[42,242,243],{},"Введите пароль для хранилища и подтвердите его.",[42,245,246,247,250],{},"Укажите имя и фамилию, название подразделения, организации, города и страны (можно оставить поля пустыми, нажав ",[27,248,249],{},"Enter",", но для корпоративных проектов лучше заполнить).",[42,252,253,254,257],{},"Подтвердите сгенерированную строку ",[27,255,256],{},"DN"," (Distinguished Name).",[42,259,260,261,264,265,267],{},"Введите пароль для ",[27,262,263],{},"release_alias",". Разрешено использовать тот же пароль, что и для хранилища, если нажмёте ",[27,266,249],{},".",[100,269,270],{},[20,271,272],{},"⚠️ Важно: Пароли нельзя восстановить. Запишите их сразу в менеджер паролей. Символы с клавиатуры не отображаются при вводе — это нормально.",[15,274,276],{"id":275},"шаг-4-создайте-резервную-копию-файла","Шаг 4: Создайте резервную копию файла",[20,278,279,280,283],{},"После успешной генерации в директории появится ",[27,281,282],{},"my_app_release.jks",". Сделайте минимум две копии:",[39,285,286,289],{},[42,287,288],{},"Зашифрованный архив на внешний носитель",[42,290,291],{},"Резервная копия в облаке с двухфакторной аутентификацией",[20,293,294],{},"Проверьте целостность файла:",[66,296,298],{"className":68,"code":297,"language":70,"meta":71,"style":71},"ls -la my_app_release.jks\n",[27,299,300],{"__ignoreMap":71},[75,301,302,305,308],{"class":77,"line":78},[75,303,304],{"class":81},"ls",[75,306,307],{"class":85}," -la",[75,309,310],{"class":89}," my_app_release.jks\n",[15,312,314],{"id":313},"шаг-5-подключите-хранилище-к-проекту","Шаг 5: Подключите хранилище к проекту",[239,316,317,320,326,335,348],{},[42,318,319],{},"Откройте Android Studio.",[42,321,322,323,267],{},"Выберите ",[27,324,325],{},"Build → Generate Signed Bundle / APK",[42,327,328,329,332,333,267],{},"В поле ",[27,330,331],{},"Key store path"," укажите путь к ",[27,334,282],{},[42,336,337,338,341,342,108,345,267],{},"Введите ",[27,339,340],{},"Key store password",", ",[27,343,344],{},"Key alias",[27,346,347],{},"Key password",[42,349,350,351,354,355,358],{},"Нажмите ",[27,352,353],{},"Next",", выберите ",[27,356,357],{},"release"," конфигурацию и завершите сборку.",[20,360,361,362,365,366,369],{},"Для автоматизации добавьте данные в ",[27,363,364],{},"build.gradle"," (модуль приложения), используя переменные окружения или ",[27,367,368],{},"keystore.properties",", чтобы ключи не попали в систему контроля версий.",[15,371,373],{"id":372},"проверка-результата","Проверка результата",[20,375,376],{},"Убедитесь, что файл подписи корректен и содержит нужные данные:",[66,378,380],{"className":68,"code":379,"language":70,"meta":71,"style":71},"keytool -list -v -keystore my_app_release.jks\n",[27,381,382],{"__ignoreMap":71},[75,383,384,386,389,391,394],{"class":77,"line":78},[75,385,47],{"class":81},[75,387,388],{"class":85}," -list",[75,390,134],{"class":85},[75,392,393],{"class":85}," -keystore",[75,395,310],{"class":89},[20,397,398,399,402,403,406,407,410,411,414],{},"В выводе найдите строку ",[27,400,401],{},"Entry type: PrivateKeyEntry",". Проверьте срок действия (",[27,404,405],{},"Valid from"," / ",[27,408,409],{},"Valid until",") и совпадение ",[27,412,413],{},"Alias name"," с тем, что вы указали при создании. Если команда выводит список без ошибок, файл готов к использованию в CI/CD-пайплайнах или ручных сборках.",[15,416,418],{"id":417},"возможные-проблемы","Возможные проблемы",[39,420,421,439,445,451],{},[42,422,423,426,427,430,431,434,435,438],{},[27,424,425],{},"keytool: command not found"," или ",[27,428,429],{},"'keytool' is not recognized"," — утилита не добавлена в системный ",[27,432,433],{},"PATH",". Укажите полный путь к исполняемому файлу JDK (например, ",[27,436,437],{},"C:\\Program Files\\Java\\jdk-17\\bin\\keytool.exe",") или обновите переменные окружения.",[42,440,441,444],{},[27,442,443],{},"java.security.InvalidKeyException: Illegal key size or default parameters"," — версия JDK устарела или отсутствуют JCE Unlimited Strength. Обновите JDK до 8u161+ или 11+.",[42,446,447,450],{},[27,448,449],{},"java.io.IOException: Keystore was tampered with, or password was incorrect"," — проверьте раскладку клавиатуры, отключите автозамену символов и убедитесь, что не включён Caps Lock. При вводе через терминал используйте копирование из менеджера паролей.",[42,452,453,456,457,459],{},[27,454,455],{},"Validity too short"," — Google Play отклоняет ключи со сроком менее 25 лет. Пересоздайте хранилище с флагом ",[27,458,220],{}," или выше.",[461,462,463],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":71,"searchDepth":93,"depth":93,"links":465},[466,467,468,469,470,471,472,473,474],{"id":17,"depth":93,"text":18},{"id":33,"depth":93,"text":34},{"id":60,"depth":93,"text":61},{"id":115,"depth":93,"text":116},{"id":233,"depth":93,"text":234},{"id":275,"depth":93,"text":276},{"id":313,"depth":93,"text":314},{"id":372,"depth":93,"text":373},{"id":417,"depth":93,"text":418},null,"2026-04-05 22:27:36","Пошаговая инструкция по созданию keystore для подписи Android-приложений. Сгенерируйте ключ через keytool и подготовьте APK к публикации в Google Play.","medium",false,"10-15 мин","md",[483,486,489],{"question":484,"answer":485},"Что будет, если я потеряю файл keystore?","Вы не сможете выпускать обновления для этого приложения ни в одном магазине. Google Play требует, чтобы новая версия была подписана тем же ключом. Без резервной копии придётся публиковать приложение заново с новым пакетом.",{"question":487,"answer":488},"Можно ли использовать один keystore для нескольких приложений?","Да, технически это разрешено, но не рекомендуется. Если ключ скомпрометируют, под угрозой окажутся все ваши проекты. Создавайте отдельный файл для каждого пакета или используйте App Signing by Google Play.",{"question":490,"answer":491},"Какой срок действия ключа выбрать?","Google Play требует минимум 25 лет (около 9125 дней). Указывайте 10000 дней или больше, чтобы избежать проблем с истечением срока действия сертификата в будущем.",[493,496,499,502,505],{"name":494,"text":495},"Откройте терминал и подготовьте директорию","Запустите командную строку и перейдите в папку для безопасного хранения ключей. Используйте команду cd для навигации.",{"name":497,"text":498},"Сгенерируйте ключ через keytool","Выполните команду создания пары ключей, указав алгоритм RSA, размер 2048 бит и срок действия.",{"name":500,"text":501},"Заполните метаданные и установите пароли","Введите пароль хранилища, имя, организацию и город. Пароль alias может совпадать с основным, но лучше задать уникальный.",{"name":503,"text":504},"Создайте резервную копию файла","Скопируйте сгенерированный .jks файл на внешний диск и в зашифрованное облако. Потеря ключа необратима.",{"name":506,"text":507},"Подключите хранилище к проекту","В Android Studio выберите Generate Signed Bundle / APK, укажите путь к файлу и введите сохранённые учётные данные.","PT15M",[510,511,512,513,514,515,516],"создание keystore android","keytool генерация ключа подписи","подпись APK release","android studio keystore","jks файл android","google play upload certificate","alias для android keystore","ru_RU",{},true,"/guides/android/creating-keystore-android","android",[523,524,525],"/guides/android/signing-apk-android-studio","/guides/android/migrating-to-app-bundle","/errors/android/keystore-not-found","Гайды Android",{"title":5,"description":477},"guides/android/creating-keystore-android","Гайд объясняет, зачем нужен keystore и как безопасно сгенерировать его через командную строку. Вы получите готовый файл подписи и настроите его в Android Studio для релиза.",[531,47,532,533,534,535],"Android","подпись приложений","keystore.jks","Google Play","разработка","guide","XKGUKMK7gJ0CJGpghyqwUZ6sXZlIsLXAb13kC3szwmM",{"data":539,"body":540},{},{"type":541,"children":542},"root",[543],{"type":544,"tag":20,"props":545,"children":546},"element",{},[547],{"type":548,"value":485},"text",{"data":550,"body":551},{},{"type":541,"children":552},[553],{"type":544,"tag":20,"props":554,"children":555},{},[556],{"type":548,"value":488},{"data":558,"body":559},{},{"type":541,"children":560},[561],{"type":544,"tag":20,"props":562,"children":563},{},[564],{"type":548,"value":491},{"data":566,"body":567},{},{"type":541,"children":568},[569],{"type":544,"tag":20,"props":570,"children":571},{},[572],{"type":548,"value":495},{"data":574,"body":575},{},{"type":541,"children":576},[577],{"type":544,"tag":20,"props":578,"children":579},{},[580],{"type":548,"value":498},{"data":582,"body":583},{},{"type":541,"children":584},[585],{"type":544,"tag":20,"props":586,"children":587},{},[588],{"type":548,"value":501},{"data":590,"body":591},{},{"type":541,"children":592},[593],{"type":544,"tag":20,"props":594,"children":595},{},[596],{"type":548,"value":504},{"data":598,"body":599},{},{"type":541,"children":600},[601],{"type":544,"tag":20,"props":602,"children":603},{},[604],{"type":548,"value":507},[]]