Как исправить ошибку «Ключ разработчик не создан. Код возврата: 1» в сборщике мобильных приложений 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При подготовке к сборке мобильного приложения в конфигурации «1С:Сборщик мобильных приложений» одним из обязательных этапов является формирование ключа разработчика для подписи APK-пакета. Нередко разработчики сталкиваются с сообщением: «Ключ разработчик не создан. Код возврата: 1». В результате генерация прерывается, и собрать мобильное приложение становится невозможно.

Разберем детально, почему возникает эта ошибка, как исправить программный код сборщика и какие существуют альтернативные способы решения проблемы.

Причина ошибки: слияние аргументов в командной строке

Проанализируем механизм, который сборщик мобильных приложений использует для создания ключа. Конфигурация обращается к консольной утилите keytool, входящей в состав Java Development Kit (JDK), формируя текстовую строку параметров запуска. В некоторых релизах сборщика (например, 2.0.5.24) допущена синтаксическая ошибка: при конкатенации строк забыты пробелы перед значениями параметров.

В результате утилита получает склеенные аргументы вида -storepassМойПароль вместо -storepass МойПароль, не может распознать переданные флаги и завершает работу с кодом возврата 1.

Способ 1. Исправление процедур в модуле FileSystemService

Если конфигурация сборщика снята с поддержки или находится на поддержке с возможностью редактирования, исправим программный код вручную. Разберем по шагам, какие изменения необходимо внести.

  1. Откроем конфигуратор и найдем общий модуль FileSystemService.
  2. Перейдем к процедуре GenerateKeyFile, которая формирует строку запуска для генерации пары ключей. Посмотрим на исходный ошибочный фрагмент:

CommandLine = Utility + " -genkeypair -v" +
        " -keystore key.key" +
        " -alias """ + KeyParameters.Alias + """" +
        " -storepass" + KeyParameters.Password +
        " -keypass" + KeyParameters.Password +
        " -keyalg RSA" +
        " -keysize 2048" +
        " -validity 40000" +
        " -dname" + dname;

Обратим внимание на параметры -storepass, -keypass и -dname: после них отсутствует пробел. Заменим данный фрагмент на корректный вариант с пробелами:


CommandLine = Utility + " -genkeypair -v" +
        " -keystore key.key" +
        " -alias """ + KeyParameters.Alias + """" +
        " -storepass " + KeyParameters.Password +
        " -keypass " + KeyParameters.Password +
        " -keyalg RSA" +
        " -keysize 2048" +
        " -validity 40000" +
        " -dname " + dname;
  1. После успешной генерации файла ключа сборщик попытается получить его контрольную сумму и выдаст следующее сообщение: «Ошибка получения хеша SHA1 ключа разработчика. Код возврата: 1». Причина аналогична — отсутствие пробела после ключа -storepass.
  2. Найдем в том же общем модуле FileSystemService функцию GetSHA1Value. Посмотрим на исходный код:

CommandLine = "cmd /c """ + Utility + " -list -v" +
        " -keystore """ + FileName + """" +
        " -alias """ + KeyAlias + """" +
        " -storepass" + Password + " >" + WorkingFile + """";

Добавим обязательный пробел после параметра -storepass:


CommandLine = "cmd /c """ + Utility + " -list -v" +
        " -keystore """ + FileName + """" +
        " -alias """ + KeyAlias + """" +
        " -storepass " + Password + " >" + WorkingFile + """";

Сохраним конфигурацию и обновим базу данных. После этого генерация ключа разработчика и считывание его отпечатка SHA1 выполнятся штатно.

Способ 2. Создание ключа вручную через командную строку

Если изменение конфигурации сборщика нежелательно или база находится на типовой поддержке без возможности внесения правок, сгенерируем ключ разработчика напрямую через командную строку операционной системы с помощью утилиты keytool.

  1. Запустим командную строку cmd.exe от имени администратора.
  2. Перейдем в каталог bin установленного JDK или убедимся, что путь к нему прописан в системной переменной PATH.
  3. Выполним команду генерации сертификата:

keytool -genkeypair -v -keystore my_developer_key.keystore -alias my_alias -keyalg RSA -keysize 2048 -validity 40000

В процессе выполнения утилита запросит пароль хранилища, пароль ключа и регистрационные данные владельца (имя, организацию, город, код страны). После подтверждения сформируется готовый файл хранилища ключей.

  1. Для получения отпечатка сертификата, который требуется сборщику, выполним команду:

keytool -list -v -keystore my_developer_key.keystore -alias my_alias

В выведенной информации найдем строку с отпечатком SHA1, скопируем полученную последовательность символов и укажем готовый файл ключа вместе с хэшем в карточке ключа разработчика в 1С без использования встроенного мастера генерации.

Дополнительные факторы, вызывающие ошибку keytool

Если правка кода выполнена, но утилита по-прежнему завершается с ненулевым кодом возврата, проанализируем сопутствующие системные параметры:

  1. Кириллица и пробелы в путях: Консольные утилиты Java могут некорректно обрабатывать пути к каталогу JDK, временной папке Windows (TEMP) или целевой папке сохранения ключа, если они содержат пробелы или русские буквы. Убедимся, что пути состоят только из латинских символов.
  2. Версия JDK: Для старых версий сборщика мобильных приложений рекомендуется использовать JDK версии 8 (1.8). В версиях JDK 11 и выше изменен стандартный формат хранилища ключей (с JKS на PKCS12), что приводит к ошибкам разбора выходного потока командной строки в 1С.
  3. Права доступа: Проверим, есть ли у пользователя операционной системы права на запись в каталог, куда сохраняются временные файлы и результирующий ключ.

Решение сопутствующей ошибки: «Cannot find ...\tools\ant\build.xml»

После успешного создания ключа на этапе непосредственной компиляции проекта сборщик может выдать ошибку: «BUILD FAILED ... Cannot find E:\sdk\tools\ant\build.xml».

Выясним причину: начиная с версии Android SDK Tools 25.3.0, компания Google удалила поддержку сборщика Apache Ant вместе со всей директорией tools/ant, переведя экосистему на Gradle. Однако старые версии сборщика мобильных приложений 1С продолжают использовать Ant для сборки.

Для устранения этой проблемы выполним следующие действия:

  1. Загрузим архив Android SDK Tools версии 25.2.5 (последняя версия, содержащая скрипты сборки Ant).
  2. Скопируем каталог ant из распакованного архива в папку tools установленного в системе Android SDK. Либо полностью заменим каталог tools на версию 25.2.5.
  3. Отключим автоматическое обновление компонентов SDK в Android Studio или SDK Manager, чтобы предотвратить повторное удаление файлов Ant.
  4. При наличии возможности обновим сборщик и мобильную платформу 1С до актуальных версий, поддерживающих современную сборку проектов с помощью Gradle.
← На главную