При разработке мобильных приложений на платформе 1С:Предприятие часто возникает ситуация, когда внешняя компонента (ВК) прекрасно работает в режиме отладки через мобильное приложение «1С:Запуск», но при попытке создать полноценный .apk файл через Сборщик мобильных приложений процесс завершается с ошибкой или предупреждением. Чаще всего в логах сборки можно увидеть сообщение: [WARN] внешняя компонента: [Имя_Компоненты] отсутствует для данной ОС.
В этой статье мы подробно разберем, почему Сборщик игнорирует файлы компоненты, которые уже есть в конфигурации, и как заставить его включить их в итоговый пакет приложения.
Проанализируем логику работы Сборщика мобильных приложений. В отличие от стандартной мобильной платформы, которая установлена на конкретном смартфоне или ТСД и использует архитектуру этого устройства (обычно это ARM), Сборщик по умолчанию пытается подготовить универсальный пакет или набор пакетов для всех поддерживаемых архитектур Android:
Если в составе внешней компоненты отсутствуют файлы хотя бы для одной из этих архитектур, валидатор Сборщика (особенно версий 2.0.x) может посчитать компоненту неполной для данной операционной системы в целом. В результате она просто не линкуется с исполняемым файлом, и в собранном приложении функции ВК оказываются недоступны, хотя в логах сборки вы видели папку Android/ARM.
Рассмотрим это на примере компоненты org_innovait_AtolSmartLiteUtils. Она предназначена для ТСД ATOL Smart.Lite, которые работают исключительно на процессорах ARM. Разработчик компоненты логично не включил в поставку библиотеки для x86, так как таких ТСД не существует. Однако Сборщик требует «полный комплект» для прохождения проверки целостности.
Выясним, как можно быстро обойти это ограничение, если вам нужно собрать приложение только под ARM-устройства. Этот метод является своего рода «костылем», но он эффективно работает, когда нет возможности переписать саму ВК.
Проанализируем пошагово процесс модификации выгрузки:
1cema.zip (или аналогичный по структуре каталог).Android.Android вы увидите папку ARM (или armeabi-v7a).i386 (это соответствует архитектуре x86).ARM (файлы .so и другие вспомогательные файлы) в только что созданную папку i386.Важное замечание: При такой манипуляции приложение успешно соберется, и на ARM-устройствах всё будет работать корректно. Однако, если вы попытаетесь запустить этот APK на эмуляторе (например, BlueStacks) или редком планшете с процессором Intel, приложение упадет с ошибкой UnsatisfiedLinkError, так как система попытается выполнить ARM-код на x86-процессоре.
Разберем более «чистый» технический подход. Внутри каждой внешней компоненты (которая представляет собой ZIP-архив) должен находиться файл manifest.xml. Он описывает, для каких платформ предназначены бинарные файлы.
Если в манифесте указано просто platform name="Android", Сборщик ожидает увидеть все 4 архитектуры. Рассмотрим пример правильного описания в манифесте, которое может помочь Сборщику понять ограничения компоненты:
<component xmlns="http://v8.1c.ru/8.2/uobjects">
<platform name="Android" architecture="armeabi-v7a">
<file>libAtolUtils.so</file>
</platform>
<platform name="Android" architecture="arm64-v8a">
<file>libAtolUtils64.so</file>
</platform>
</component>
Если явно указать архитектуры в манифесте самой ВК перед тем, как импортировать её в конфигурацию 1С (в макет или в общий макет), Сборщик может пропустить отсутствие папок для x86 без дополнительных манипуляций с файлом 1cema.
Проанализируем ситуацию с точки зрения издателя приложений. Когда вы загружаете приложение в Google Play, магазин требует наличия 64-битных библиотек (arm64-v8a). Платформа 1С старается соответствовать этим стандартам «из коробки». Даже если вы не планируете публиковать приложение в Store, механизмы сборки остаются унифицированными.
В последних версиях Сборщика (начиная с 2.0.11) требования были несколько смягчены, но если используется старый шаблон мобильной платформы, проблема остается актуальной. Файл 1cema является описанием ресурсов, и если Сборщик видит «пробел» в поддерживаемых архитектурах ОС Android, он выдает [WARN], который на некоторых этапах линковки трактуется как критическая нехватка данных.
Чтобы избежать подобных проблем в будущем, при работе с мобильными внешними компонентами рекомендуем придерживаться следующих правил:
armeabi-v7a и arm64-v8a. Это минимум для современных устройств.Таким образом, даже если Сборщик 1С отказывается видеть вашу внешнюю компоненту, решение кроется в эмуляции полной структуры поддерживаемых архитектур Android внутри архива конфигурации.