При сборке автономного мобильного приложения с помощью конфигурации «Сборщик мобильных приложений» разработчики нередко сталкиваются с аварийным завершением процесса сборки Apache Ant. В логе процесса появляется сообщение об ошибке следующего вида:
-release-sign:
[echo] Signing final apk...
BUILD FAILED
C:\Android\sdk\tools\ant\build.xml:1135: The following error occurred while executing this line:
C:\Android\sdk\tools\ant\build.xml:1147: C:\Users\user\mobkas\guid-папка\key.key (Не удается найти указанный файл)
Проанализируем детально причины возникновения этой ошибки, разберем по шагам варианты ее решения, а также рассмотрим особенности работы с внешними компонентами и драйверами торгового оборудования в собранном приложении.
Процесс сборки Android-приложения через Ant завершается этапом подписи сгенерированного файла 1cem-release-unsigned.apk. Для выполнения этой операции скрипт сборки обращается к файлу ключа разработчика (хранилищу ключей), путь к которому передается конфигурацией сборщика в управляющий файл build.xml.
Сбой происходит по одной из следующих причин:
FileSystemService процедура вызова утилиты keytool формирует командную строку без обязательных пробелов между ключами запуска (например, между -alias, -keystore и путями к файлам). В результате утилита завершает работу с ошибкой, файл ключа не создается, а Ant не находит ожидаемый key.key.Если используется автоматическая генерация ключа средствами конфигурации сборщика мобильных приложений, исправим программный код формирования команды генерации.
FileSystemService.GenerateKeyFile (или СформироватьФайлКлюча).keytool из состава Java Development Kit (JDK).-genkey, -v, -keystore, -alias, -keyalg, -validity) присутствуют пробелы, а пути к файлам и каталогам корректно обрамлены кавычками на случай наличия пробелов в именах папок.Наиболее надежный и рекомендуемый способ, исключающий влияние ошибок в алгоритмах сборщика, — предварительное создание собственного хранилища ключей с помощью утилиты командной строки JDK.
Выполним генерацию ключа вручную:
C:\Program Files\Java\jdk1.8.0_131\bin) или убедимся, что путь к JDK прописан в системной переменной PATH.
keytool -genkey -v -keystore C:\AndroidKeys\my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
В процессе выполнения утилита запросит ввод пароля хранилища, пароля ключа (можно сделать их одинаковыми), а также регистрационные данные разработчика (имя, организацию, город, страну).
Затем привяжем созданный ключ в сборщике:
my-release-key.keystore.my-key-alias) и пароли, указанные при формировании через keytool.Нередко после успешной сборки и установки автономного APK-пакета внешние компоненты (например, драйверы торгового оборудования, сканеров штрихкодов или фискальных регистраторов) отказываются работать или выдают ошибку о том, что драйвер не установлен, хотя при запуске мобильного приложения через мобильный разработчик (отладчик) всё функционирует корректно.
Разберем основные причины такого поведения и способы их устранения:
Внешние компоненты для Android поставляются в виде скомпилированных библиотек (файлов .so) под конкретные архитектуры (armeabi-v7a, arm64-v8a, x86). Если при сборке мобильного приложения выбрана целевая платформа (например, только ARM), а устройство работает на x86 или 64-битном ARM без включения совместимых библиотек, компонента не сможет загрузиться в память процесса.
При сборке автономного приложения сборщик формирует манифест с нуля на основании отмеченных настроек. Для работы оборудования (по Bluetooth, USB, Wi-Fi) драйверу требуются дополнительные разрешения, такие как BLUETOOTH, BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION, а также соответствующие теги uses-feature. Проверим, чтобы в настройках мобильной конфигурации были отмечены все необходимые разрешения для внешних компонент.
Внешняя компонента для мобильной платформы 1С представляет собой zip-архив с файлом MANIFEST.XML и подкаталогами для поддерживаемых платформ. Убедимся, что архив макета компоненты в конфигурации не поврежден и содержит правильную структуру папок с динамическими библиотеками.
Для стабильной сборки мобильных приложений старых версий (на базе платформы 8.3.10 и смежных) важно соблюдать системные ограничения окружения:
Oracle JDK 1.8 (Java 8). Более новые версии Java (JDK 11, JDK 17) содержат несовместимые параметры компилятора и вызывают сбои при сборке скриптами Ant.Android SDK Tools 25.2.3 и Build-Tools версии не выше 25.0.3.C:\mobbuild\), чтобы утилиты aapt и apkbuilder не падали при создании временных подпапок с длинными GUID.