Процесс сборки мобильного приложения на платформе 1С:Предприятие часто сопровождается техническими сложностями, связанными с анализом состава расширений и настройкой окружения Android. Ошибки могут возникать на разных этапах: от статического анализа кода и инициализации виртуальной машины Java до слияния манифестов при использовании внешних компонент. Разберем наиболее частые проблемы, с которыми сталкиваются разработчики при использовании "Сборщика мобильных приложений" версии 8.3.24.68, и найдем эффективные способы их решения.
Одной из самых распространенных ошибок является невозможность зарезервировать достаточное количество оперативной памяти для виртуальной машины Java (JVM). В логах это выглядит следующим образом: Error occurred during initialization of VM. Could not reserve enough space for 1572864KB object heap. Проанализируем причину возникновения данной ситуации.
Основная причина заключается в использовании 32-разрядной версии JDK, что подтверждается анализом зависимостей конфигурации. Архитектура x86 накладывает жесткие ограничения на размер непрерывного блока памяти, который может выделить процесс. Даже если на вашем компьютере 32 ГБ оперативной памяти, 32-битная Java не сможет выделить запрашиваемые 1.5 ГБ (1536 MB) под нужды Gradle.
Для решения этой проблемы выполним следующие шаги:
openjdk version 17.0.11.Путь к Java. Он должен указывать на корень установленной 64-битной JDK.gradle.properties в рабочей директории сборки, где можно указать параметр:
org.gradle.jvmargs=-Xmx1024m
Это ограничит максимальный размер "кучи" (heap) до 1 ГБ, что позволит 32-битному процессу успешно стартовать, хотя для крупных проектов этого может оказаться недостаточно.
Следующая критическая точка — этап слияния манифестов (Manifest Merger). Ошибка Execution failed for task ':processSignReleaseMainManifest' часто сопровождается сообщением о дублировании элементов. Рассмотрим типичный пример конфликта разрешений, возникающий из-за внешних компонент для работы с Bluetooth.
Представим ситуацию, когда в манифесте основной мобильной платформы и в манифесте внешней компоненты (библиотеки) одновременно объявлено одно и то же разрешение, например, ACCESS_WIFI_STATE. Система сборки Gradle не всегда может корректно объединить эти записи, если они имеют разные атрибуты или объявлены внутри разных узлов.
Разберем алгоритм исправления внешней компоненты:
.zip или .cfe, внутри которой лежит архив с нативными библиотеками) из конфигуратора 1С на локальный диск.AndroidManifest.xml, относящийся к Android-части компоненты.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Если ручная правка манифестов кажется слишком трудоемкой, или если вы сталкиваетесь с множественными конфликтами в разных компонентах, рассмотрим альтернативный вариант. Начиная с версии платформы 8.3.25, механизмы Сборщика мобильных приложений были значительно доработаны.
Важный нюанс совместимости: Сборщик мобильных приложений версии 8.3.25 может собирать приложения на базе мобильных платформ 8.3.24 и ниже. При этом нам не требуется обновлять основную технологическую платформу 1С, на которой работают пользователи, до 25-й версии. Достаточно развернуть базу Сборщика на новой версии платформы.
Преимущества использования Сборщика 8.3.25:
Для стабильной работы сборки убедимся, что установлены все необходимые компоненты в Android Studio. Нам потребуются:
Также проанализируем системные переменные. Переменная JAVA_HOME должна указывать на путь к 64-битной JDK, а в системной переменной Path должен присутствовать путь к папке bin внутри JDK. Это гарантирует, что Gradle, запускаемый Сборщиком, будет использовать именно ту версию Java, которую мы настроили, а не встроенную JRE от Android Studio или старую 32-битную версию.
В случае возникновения ошибки Unable to start the daemon process, рекомендуем очистить кэш Gradle. Для этого перейдем в папку профиля пользователя C:\Users\ИмяПользователя\.gradle и удалим содержимое папки daemon. Это сбросит состояние фоновых процессов, которые могли зависнуть или блокировать память после неудачных попыток сборки.
Следуя этим шагам — переходу на 64-битную JDK 17, очистке манифестов внешних компонент и, при необходимости, обновлению версии Сборщика до 8.3.25 — мы обеспечим стабильную и предсказуемую сборку мобильного приложения на платформе 1С.