При подготовке к сборке мобильного приложения в конфигурации «1С:Сборщик мобильных приложений» одним из обязательных этапов является формирование ключа разработчика для подписи APK-пакета. Нередко разработчики сталкиваются с сообщением: «Ключ разработчик не создан. Код возврата: 1». В результате генерация прерывается, и собрать мобильное приложение становится невозможно.
Разберем детально, почему возникает эта ошибка, как исправить программный код сборщика и какие существуют альтернативные способы решения проблемы.
Проанализируем механизм, который сборщик мобильных приложений использует для создания ключа. Конфигурация обращается к консольной утилите keytool, входящей в состав Java Development Kit (JDK), формируя текстовую строку параметров запуска. В некоторых релизах сборщика (например, 2.0.5.24) допущена синтаксическая ошибка: при конкатенации строк забыты пробелы перед значениями параметров.
В результате утилита получает склеенные аргументы вида -storepassМойПароль вместо -storepass МойПароль, не может распознать переданные флаги и завершает работу с кодом возврата 1.
Если конфигурация сборщика снята с поддержки или находится на поддержке с возможностью редактирования, исправим программный код вручную. Разберем по шагам, какие изменения необходимо внести.
FileSystemService.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;
-storepass.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 выполнятся штатно.
Если изменение конфигурации сборщика нежелательно или база находится на типовой поддержке без возможности внесения правок, сгенерируем ключ разработчика напрямую через командную строку операционной системы с помощью утилиты keytool.
cmd.exe от имени администратора.bin установленного JDK или убедимся, что путь к нему прописан в системной переменной PATH.
keytool -genkeypair -v -keystore my_developer_key.keystore -alias my_alias -keyalg RSA -keysize 2048 -validity 40000
В процессе выполнения утилита запросит пароль хранилища, пароль ключа и регистрационные данные владельца (имя, организацию, город, код страны). После подтверждения сформируется готовый файл хранилища ключей.
keytool -list -v -keystore my_developer_key.keystore -alias my_alias
В выведенной информации найдем строку с отпечатком SHA1, скопируем полученную последовательность символов и укажем готовый файл ключа вместе с хэшем в карточке ключа разработчика в 1С без использования встроенного мастера генерации.
Если правка кода выполнена, но утилита по-прежнему завершается с ненулевым кодом возврата, проанализируем сопутствующие системные параметры:
TEMP) или целевой папке сохранения ключа, если они содержат пробелы или русские буквы. Убедимся, что пути состоят только из латинских символов.После успешного создания ключа на этапе непосредственной компиляции проекта сборщик может выдать ошибку: «BUILD FAILED ... Cannot find E:\sdk\tools\ant\build.xml».
Выясним причину: начиная с версии Android SDK Tools 25.3.0, компания Google удалила поддержку сборщика Apache Ant вместе со всей директорией tools/ant, переведя экосистему на Gradle. Однако старые версии сборщика мобильных приложений 1С продолжают использовать Ant для сборки.
Для устранения этой проблемы выполним следующие действия:
ant из распакованного архива в папку tools установленного в системе Android SDK. Либо полностью заменим каталог tools на версию 25.2.5.