При работе со сборщиком мобильных приложений 1С специалисты часто сталкиваются с ошибками на этапе генерации ключа разработчика или подписи .apk файла. Проблема может скрываться как в системных настройках окружения (Java, Android SDK), так и в ошибках самого программного кода конфигурации «Сборщик мобильных приложений». Рассмотрим подробно, как диагностировать и устранить эти неисправности, чтобы успешно собрать мобильное решение.
Одной из наиболее распространенных причин ошибки при создании ключа является некорректное формирование строки запуска внешней утилиты keytool. В коде общего модуля FileSystemService (или ФайловаяСистемаСервер в зависимости от версии) могут отсутствовать необходимые пробелы между параметрами командной строки. Проанализируем процедуру GenerateKeyFile (ГенерацияФайлаКлюча).
В некоторых версиях сборщика (включая 8.3.10.хх и даже более поздние 8.3.21.хх) параметры -storepass, -keypass и -dname склеиваются со значениями паролей или имен. Нам необходимо найти это место и добавить недостающие пробелы. Разберем правильный вариант формирования строки CommandLine:
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 . Без них утилита keytool не сможет распознать аргументы, что приведет к ошибке с кодом возврата 1.
Аналогичная проблема часто встречается в функции GetSHA1Value (ПолучитьЗначениеSHA1), которая вызывается для проверки созданного ключа. Проанализируем строку вызова:
CommandLine = "cmd /c """ + Utility + " -list -v"
+ " -keystore """ + FileName + """"
+ " -alias """ + KeyAlias + """"
+ " -storepass " + Password + " >" + WorkingFile + """";
Здесь также крайне важно убедиться в наличии пробела после -storepass . После внесения этих правок в код конфигурации запуск процесса генерации ключа должен пройти успешно.
Часто при указании пути к установленной Java сборщик выдает ошибку: «Указанный каталог не является каталогом JDK». Проанализируем ситуацию: почему это происходит, если Java установлена корректно? Дело в том, что 1С выполняет проверку наличия файла jar.exe в подпапке bin указанного каталога.
Разберем логику проверки в функции IsJDKDirectory:
Function IsJDKDirectory(Directory) Export
SysInfo = New SystemInfo;
If SysInfo.PlatformType = PlatformType.Windows_x86 Or SysInfo.PlatformType = PlatformType.Windows_x86_64 Then
JAR = Directory + "\bin\jar.exe";
Else
JAR = Directory + "\bin\jar";
EndIf;
// Проверка существования файла jar
If Not FileExists(JAR) Then
// Возврат ошибки, если файл не найден
Return ResultError;
EndIf;
...
EndFunction
Если вы установили JRE (Java Runtime Environment) вместо полноценного JDK (Java Development Kit), файла jar.exe у вас не будет. Выясним, как это решить:
java.exe и переименовать копию в jar.exe в той же папке bin. Сборщик «увидит» нужный файл и пропустит проверку, однако это может привести к ошибкам на этапе реальной упаковки приложения, поэтому используйте этот метод с осторожностью.При использовании современных версий Android SDK (устанавливаемых через Android Studio) сборщик может выдать ошибку: «BUILD FAILED ... Cannot find .../sdk/tools/ant/build.xml». Это связано с тем, что Google удалила поддержку Ant из новых ревизий SDK (начиная с 25.3.0), перейдя на Gradle.
Рассмотрим, как вернуть недостающие компоненты:
tools с необходимым содержимым, включая ant и старый android.bat.Важный совет: Старайтесь избегать кириллицы в путях к Android SDK и JDK. Если ваша учетная запись Windows называется «Иван», путь C:\Users\Иван\AppData\... может стать причиной нечитаемых ошибок. Перенесите SDK в корень диска, например, в C:\android-sdk.
Если после всех правок создание ключа проходит, но возникает ошибка «Ошибка получения хеша SHA1», проанализируем вывод команды keytool -list -v. Сборщик 1С ищет в текстовом ответе строку "SHA1:". Если на вашем сервере или компьютере установлена русская локализация Java, утилита выдаст текст: "Отпечаток сертификата (SHA1):". Программный парсер 1С не найдет английское слово и вернет пустой результат.
Для решения этой проблемы можно временно переключить региональные стандарты системы на английские (США) в панели управления Windows перед сборкой ключа или попытаться форсировать язык вывода в коде 1С, добавив параметр -J-Duser.language=en в строку вызова утилиты Utility.
Если настройка локального окружения кажется слишком трудоемкой или возникают неразрешимые конфликты версий, рассмотрим платформенный сервис сборки на портале developer.1c.ru.
Преимущества облачной сборки:
Для использования сервиса достаточно иметь действующую подписку ИТС и регистрацию на портале разработчиков 1С. Это избавляет от необходимости править код в общем модуле FileSystemService и решать проблемы с отсутствующими jar.exe или ant/build.xml.
Подводя итог, скажем: для успешной локальной сборки критически важно использовать JDK 8, установить Obsolete Tools для Android SDK и убедиться, что в коде сборщика параметры командной строки разделены пробелами. Соблюдение этих условий позволит избежать большинства типовых ошибок.