При сборке мобильных приложений на платформе 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда процесс прерывается ошибкой на этапе выполнения задачи :processReleaseResources. Эта проблема особенно актуальна для версий мобильной платформы 8.3.14 и ниже, а также при использовании внешних компонент для работы с оборудованием (сканеры штрихкодов, ТСД). Выясним причину возникновения этой ошибки и разберем по шагам методы её устранения.
Для начала проанализируем текст ошибки, который выдает 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>, система сборки генерирует критическую ошибку и прекращает работу.
Рассмотрим ситуацию, когда источником проблемного тега является внешняя компонента. Часто это случается с драйверами оборудования, такими как ScancodeBarcodeScannerCPT. Рассмотрим алгоритм действий по очистке компоненты:
.zip, так как внешняя компонента 1С представляет собой архив.AndroidManifest.xml (он может находиться в корне или в папках, относящихся к Android-сборке).<queries>. Если она расположена внутри <application> или просто присутствует в файле, который обрабатывается старым Gradle, её необходимо удалить или переместить в корень <manifest> (вне блока application)..zip, сохранив исходную структуру архива.После этого попробуем повторить сборку приложения. В большинстве случаев, если ошибка была вызвана именно компонентой, сборка пройдет успешно.
Проанализируем параметры сборщика, указанные в логах. Часто разработчики используют последние доступные версии Java (JDK 11, 12, 17), однако для стабильной работы мобильной платформы 1С версий 8.3.13 — 8.3.14 критически важно использовать именно JDK 8 (версия 1.8).
Разберем, почему это важно. В версиях Java выше 8-й из состава стандартных библиотек были удалены некоторые модули (например, JAXB), которые активно используются старыми версиями Android SDK для манипуляций с XML-файлами манифестов. Это может приводить к непредсказуемым ошибкам в задаче processReleaseResources.
Выполним следующие шаги для настройки окружения:
C:\Program Files\Java\jdk1.8.0_151.PATH путь к JDK 8 стоит выше других версий Java.Рассмотрим ситуацию, когда в приложении нет внешних компонент, но ошибка unexpected element <queries> все равно возникает. Это означает, что тег попал в сборку через стандартные библиотеки Android Support Library или Google Play Services, которые сборщик подтягивает автоматически.
В этом случае мы не можем напрямую отредактировать файл в конфигурации 1С. Нам необходимо проанализировать содержимое рабочего каталога сборщика. Разберем пошагово:
C:\MobileSDK\temp\mab-...).build\intermediates\merged_manifests\release\AndroidManifest.xml.<queries> вызывает сбой.Если мы обнаружили, что тег добавляется сторонними библиотеками, попробуем зафиксировать версию Android SDK Build-tools. Для платформы 8.3.14 рекомендуется использовать версию 28.0.3. Если в Android SDK Manager установлены более новые версии (30.x.x и выше), система может использовать их логику проверки манифеста. Попробуем удалить лишние версии Build-tools, оставив только 28.0.3.
Если у нас есть доступ к редактированию файлов проекта до момента запуска компиляции, мы можем попытаться принудительно отключить использование новой версии упаковщика ресурсов AAPT2, которая слишком строго проверяет теги. Для этого в файле gradle.properties внутри временной папки сборки можно добавить строку:
android.enableAapt2=false
Однако стоит учитывать, что в современных версиях Android SDK этот флаг может игнорироваться. Более надежным способом является использование скриптов автоматизации (например, на языке PowerShell), которые будут сканировать папку temp в процессе сборки и удалять строку с <queries> из всех XML-файлов до того, как Gradle начнет их объединять.
Выясним, какой путь является наиболее предпочтительным для долгосрочного решения задачи. Постоянная ручная правка манифестов — это трудоемкий процесс, подверженный ошибкам. Рассмотрим стратегические рекомендации:
<queries>.Таким образом, мы детально разобрали природу ошибки, связанной с тегом <queries>, и изучили несколько способов её решения: от простого редактирования архива внешней компоненты до настройки системных переменных и версий инструментов разработки. Применяя эти знания, вы сможете успешно собирать мобильные приложения 1С даже при использовании специфического оборудования и устаревших версий платформы.