Почему возникает ошибка unexpected element queries found in manifest application при сборке мобильного приложения 1С и как её исправить?

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

При сборке мобильных приложений на платформе 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда процесс прерывается ошибкой на этапе выполнения задачи :processReleaseResources. Эта проблема особенно актуальна для версий мобильной платформы 8.3.14 и ниже, а также при использовании внешних компонент для работы с оборудованием (сканеры штрихкодов, ТСД). Выясним причину возникновения этой ошибки и разберем по шагам методы её устранения.

Анализируем причину ошибки: тег queries и Package Visibility

Для начала проанализируем текст ошибки, который выдает Gradle: AAPT: error: unexpected element <queries> found in <manifest><application>. Чтобы понять, почему это происходит, обратимся к изменениям в операционной системе Android. Начиная с Android 11 (API level 30), компания Google ввела концепцию «видимости пакетов» (Package Visibility). Для того чтобы одно приложение могло взаимодействовать с другими установленными пакетами, в файл AndroidManifest.xml необходимо добавлять специальный раздел <queries>.

Однако старые версии инструментов сборки Android (Android Gradle Plugin и AAPT2), которые встроены в сборщик мобильных приложений 1С прошлых лет, не имеют информации об этом теге. Когда сборщик пытается объединить (merge) манифесты всех библиотек и внешних компонент в один итоговый файл, он встречает неизвестный элемент <queries>. Если этот тег к тому же ошибочно попадает внутрь секции <application>, система сборки генерирует критическую ошибку и прекращает работу.

Метод 1. Редактирование внешних компонент (на примере ScancodeBarcodeScannerCPT)

Рассмотрим ситуацию, когда источником проблемного тега является внешняя компонента. Часто это случается с драйверами оборудования, такими как ScancodeBarcodeScannerCPT. Рассмотрим алгоритм действий по очистке компоненты:

  1. Выясним, где хранится компонента. В конфигурации 1С перейдем в раздел Общие макеты.
  2. Найдем макет с двоичными данными компоненты. Попробуем выгрузить его в файл.
  3. Поскольку диалог сохранения может не предлагать расширение, принудительно укажем расширение .zip, так как внешняя компонента 1С представляет собой архив.
  4. Распакуем полученный архив. Внутри мы обнаружим структуру файлов, среди которых будет AndroidManifest.xml (он может находиться в корне или в папках, относящихся к Android-сборке).
  5. Откроем этот файл любым текстовым редактором и найдем в нем секцию <queries>. Если она расположена внутри <application> или просто присутствует в файле, который обрабатывается старым Gradle, её необходимо удалить или переместить в корень <manifest> (вне блока application).
  6. Запакуем файлы обратно в .zip, сохранив исходную структуру архива.
  7. Загрузим измененный файл обратно в Общий макет конфигурации 1С.

После этого попробуем повторить сборку приложения. В большинстве случаев, если ошибка была вызвана именно компонентой, сборка пройдет успешно.

Метод 2. Проверка версии JDK и системного окружения

Проанализируем параметры сборщика, указанные в логах. Часто разработчики используют последние доступные версии Java (JDK 11, 12, 17), однако для стабильной работы мобильной платформы 1С версий 8.3.13 — 8.3.14 критически важно использовать именно JDK 8 (версия 1.8).

Разберем, почему это важно. В версиях Java выше 8-й из состава стандартных библиотек были удалены некоторые модули (например, JAXB), которые активно используются старыми версиями Android SDK для манипуляций с XML-файлами манифестов. Это может приводить к непредсказуемым ошибкам в задаче processReleaseResources.

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

  1. Установим JDK 1.8.0_151 (или более поздний апдейт 8-й версии).
  2. В настройках сборщика мобильных приложений 1С укажем путь к новой Java, например: C:\Program Files\Java\jdk1.8.0_151.
  3. Убедимся, что в системной переменной PATH путь к JDK 8 стоит выше других версий Java.

Метод 3. Решение проблемы для «пустого» приложения

Рассмотрим ситуацию, когда в приложении нет внешних компонент, но ошибка unexpected element <queries> все равно возникает. Это означает, что тег попал в сборку через стандартные библиотеки Android Support Library или Google Play Services, которые сборщик подтягивает автоматически.

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

  1. Перейдем в каталог, указанный в логе сборки как Рабочий каталог (например, C:\MobileSDK\temp\mab-...).
  2. Найдем файл по пути build\intermediates\merged_manifests\release\AndroidManifest.xml.
  3. Проанализируем строки, на которые указывает ошибка (например, строка 177). Мы увидим, какой именно блок <queries> вызывает сбой.

Если мы обнаружили, что тег добавляется сторонними библиотеками, попробуем зафиксировать версию Android SDK Build-tools. Для платформы 8.3.14 рекомендуется использовать версию 28.0.3. Если в Android SDK Manager установлены более новые версии (30.x.x и выше), система может использовать их логику проверки манифеста. Попробуем удалить лишние версии Build-tools, оставив только 28.0.3.

Метод 4. Тонкая настройка Gradle

Если у нас есть доступ к редактированию файлов проекта до момента запуска компиляции, мы можем попытаться принудительно отключить использование новой версии упаковщика ресурсов AAPT2, которая слишком строго проверяет теги. Для этого в файле gradle.properties внутри временной папки сборки можно добавить строку:

android.enableAapt2=false

Однако стоит учитывать, что в современных версиях Android SDK этот флаг может игнорироваться. Более надежным способом является использование скриптов автоматизации (например, на языке PowerShell), которые будут сканировать папку temp в процессе сборки и удалять строку с <queries> из всех XML-файлов до того, как Gradle начнет их объединять.

Подведем итоги и дадим рекомендации

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

Таким образом, мы детально разобрали природу ошибки, связанной с тегом <queries>, и изучили несколько способов её решения: от простого редактирования архива внешней компоненты до настройки системных переменных и версий инструментов разработки. Применяя эти знания, вы сможете успешно собирать мобильные приложения 1С даже при использовании специфического оборудования и устаревших версий платформы.

← На главную