Как исправить ошибку processSignReleaseMainManifest FAILED при сборке мобильного приложения 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Сборка мобильного приложения на платформе 1С:Предприятие — это сложный многоэтапный процесс, в котором задействованы не только инструменты 1С, но и компоненты Android SDK, Java и Gradle. Одной из самых коварных проблем, с которой сталкиваются разработчики, является ошибка на этапе processSignReleaseMainManifest. Проанализируем ситуацию: визуально сборка идет успешно, но в определенный момент Gradle выдает фатальный сбой, сообщая о неудачном слиянии манифестов (Manifest merger failed).

Рассмотрим подробнее лог ошибки. Как правило, в нем содержится множество предупреждений и одна критическая ошибка, выглядящая примерно так: Error: Element uses-permission#android.permission.BLUETOOTH_SCAN duplicated. Это означает, что в итоговом файле AndroidManifest.xml, который формируется «на лету» из различных источников, одно и то же разрешение было объявлено несколько раз с несовпадающими параметрами или просто в избыточном количестве, что современные инструменты сборки Android считают недопустимым.

Выясним причину конфликта манифестов

Разберем по шагам, как формируется мобильное приложение. Сборщик берет за основу ядро мобильной платформы, добавляет туда вашу конфигурацию и — что критически важно — внешние компоненты (драйверы торгового оборудования, сканеров, принтеров). Каждая такая компонента содержит свой мини-манифест (файл ANDROID_MANIFEST_EXTENTIONS.XML). Инструмент Manifest Merger пытается объединить все эти файлы в один большой AndroidManifest.xml. Если мобильная платформа 1С уже запрашивает разрешение на использование Bluetooth, а следом за ней это же разрешение запрашивает драйвер сканера, возникает дублирование.

Проанализируем ситуацию с новыми версиями Android (12 и выше). В них изменились требования к разрешениям Bluetooth (появились BLUETOOTH_SCAN, BLUETOOTH_CONNECT и BLUETOOTH_ADVERTISE). Старые внешние компоненты могут содержать жестко прописанные старые разрешения, которые конфликтуют с новыми правилами платформы. Именно это мы и видим в логах: система сообщает, что элемент uses-permission продублирован в разных строках файла.

Решение №1: Использование актуальной версии Сборщика (8.3.25 и выше)

Самый простой и эффективный способ решить проблему — это обновить Сборщик мобильных приложений до версии 8.3.25 или более поздней. Посмотрим, почему это помогает. Начиная с версии 8.3.25, разработчики 1С внедрили в Сборщик механизм автоматической нормализации манифеста. Теперь Сборщик перед передачей проекта в Gradle самостоятельно анализирует результирующий XML-файл и вычищает из него дубликаты разрешений, предотвращая конфликт Manifest Merger.

Важно отметить нюанс совместимости версий. Рассмотрим правила, которыми стоит руководствоваться:

  1. Версия Сборщика должна быть не ниже версии используемой мобильной платформы.
  2. Сборщик версии 8.3.25 и выше успешно собирает приложения на базе более ранних платформ (например, 8.3.18 или 8.3.24).
  3. При сборке желательно использовать одну из последних версий мобильной платформы, чтобы избежать предупреждений о выгрузке конфигурации старым конфигуратором.

Решение №2: Ручная правка манифестов внешних компонент

Если по каким-то причинам вы не можете обновить Сборщик, или автоматическая очистка не справляется, разберем более трудоемкий, но надежный метод ручного исправления. Проблема локализована во внешних компонентах, которые включены в вашу конфигурацию (например, Драйвер1СЭквайринговыеТерминалыСбербанк или драйверы АТОЛ).

Выполним следующие действия для каждой проблемной компоненты:

  1. Найдем в конфигурации (в ветке Общие макеты) макет, содержащий драйвер торгового оборудования. Обычно это двоичные данные.
  2. Извлечем содержимое макета: выгрузим его в файл с расширением .zip.
  3. Откроем полученный архив и найдем внутри файл ANDROID_MANIFEST_EXTENTIONS.XML.
  4. Проанализируем содержимое этого файла. Мы увидим там строки разрешений. Пример типичного содержимого:
    
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    </manifest>
    
  5. Сверим список разрешений в файле с логом ошибок сборки. Если в логе указано, что android.permission.BLUETOOTH дублируется, смело удаляем эту строку из файла компоненты.
  6. Сохраним изменения в XML-файле, обновим его внутри ZIP-архива.
  7. Загрузим модифицированный архив обратно в Общий макет конфигурации 1С.
  8. Перевыгрузим мобильную конфигурацию и запустим сборку заново.

Важный совет: не удаляйте все разрешения подряд. Оставляйте те, которые не упоминаются в логе ошибок как дубликаты, иначе компонента может потерять доступ к необходимым функциям устройства.

Дополнительные рекомендации по настройке окружения

Посмотрим на другие аспекты, которые могут влиять на успех операции processSignReleaseMainManifest. В логе часто фигурируют предупреждения о версиях Java и Android SDK. Разберем оптимальные параметры:

Выбор JDK: Несмотря на то, что старые инструкции рекомендуют JDK 8, для современных версий мобильной платформы (8.3.24 и выше) и инструментов сборки Android (AGP) настоятельно рекомендуется использовать JDK 11. Это обеспечивает более стабильную работу скриптов Gradle при слиянии ресурсов и манифестов.

Очистка кэша: Gradle активно кэширует результаты работы. Если вы исправили манифесты в макетах, но сборка все равно падает с той же ошибкой, проанализируем состояние рабочего каталога. Обязательно очищайте папку, указанную в поле Рабочий каталог (например, C:\Temp\MobileAppBuilder\), перед каждой новой попыткой после внесения правок в код или макеты.

Параметры gradle.properties: Убедимся, что в настройках сборки включена поддержка AndroidX и Jetifier, что критично для современных внешних компонент:


android.useAndroidX = true
android.enableJetifier = true

Подведем итог. Ошибка processSignReleaseMainManifest FAILED — это сигнал о том, что в итоговом манифесте приложения возникла «каша» из повторяющихся прав доступа. Использование Сборщика мобильных приложений версии 8.3.25 является «золотым стандартом» решения, так как он берет на себя всю рутину по очистке XML-структур. В экзотических случаях всегда остается возможность ручного «хирургического» вмешательства в манифесты драйверов через ZIP-архивы макетов.

← На главную