При попытке собрать мобильное приложение с помощью стандартного «Сборщика мобильных приложений 1С» разработчики часто сталкиваются с критической ошибкой, которая останавливает процесс на этапе выполнения Gradle-скриптов. В логе сборки это выглядит следующим образом: FAILURE: Build failed with an exception. What went wrong: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache. Проблема сопровождается моментальным прекращением сборки, обычно через несколько секунд после старта.
В этой статье мы подробно разберем, почему возникает данная ошибка, как она связана с архитектурой современных версий Java и какие шаги необходимо предпринять, чтобы успешно собрать ваше мобильное приложение.
Для начала разберемся в механике работы сборщика. Когда мы нажимаем кнопку «Собрать» в базе сборщика, 1С запускает внешние инструменты: Android SDK и систему автоматизации сборки Gradle. Внутри Gradle активно используется язык программирования Groovy, который отвечает за обработку сценариев сборки.
Основная проблема заключается в несовместимости версий. Начиная с Java 14, разработчики из Oracle внесли существенные изменения в механизмы работы рефлексии (доступа к внутренним структурам классов) в рамках проекта Jigsaw. Класс ReflectionCache в библиотеке Groovy, который используется в старых версиях Gradle, пытается получить доступ к системным структурам Java способом, который в новых версиях JDK был заблокирован или полностью удален из соображений безопасности и оптимизации.
Рассмотрим зависимости Gradle от версий Java:
Поскольку сборщик мобильных приложений (особенно версий 2.0.12.x и близких к ним) использует внутренние шаблоны и скрипты, ориентированные на более старые версии Gradle (часто 5.x), возникает конфликт. Система пытается запустить старый код Groovy на новой виртуальной машине Java, что и приводит к ошибке инициализации класса.
Как показывает практика и опыт многих разработчиков, наиболее надежным решением является отказ от использования Java 14, 15 и более новых версий в пользу проверенных временем JDK 11 или JDK 13.
Рассмотрим пошагово процесс замены версии Java:
C:\Program Files\Java\jdk-11.0.12.C:\temp). Перед новой попыткой сборки рекомендуется полностью очистить временные файлы, чтобы исключить влияние старых артефактов Gradle.Если мы не хотим устанавливать несколько версий JDK в систему, мы можем воспользоваться тем инструментом, который уже идет в комплекте с Android Studio. Компания Google поставляет проверенную версию JRE (Java Runtime Environment), которая гарантированно совместима с инструментами Android SDK.
Разберем, как это сделать:
C:\Program Files\Android\Android Studio.jre или jbr (в новых версиях).Например, путь может выглядеть так: C:\Program Files\Android\Android Studio\jre. Использование этого пути часто решает не только проблему с ReflectionCache, но и другие скрытые ошибки несовместимости версий.
Даже после исправления ситуации с Java, мы можем столкнуться с другими ошибками. Проанализируем параметры успешной сборки для платформы 1С 8.3.17 и выше:
Иногда настройки внутри 1С могут перекрываться системными переменными Windows. Рассмотрим, как проверить системные настройки:
JAVA_HOME. Если она указывает на JDK 14/15, это может сбивать с толку Gradle, даже если в 1С указан другой путь.JAVA_HOME на путь к JDK 11, либо убедиться, что в переменной Path путь к нужной версии Java стоит выше остальных.Подводя итог, можно сказать, что ошибка Could not initialize class org.codehaus.groovy.reflection.ReflectionCache — это классический симптом «избыточно новой» версии Java для старых скриптов сборки.
Краткий чек-лист для исправления:
Android API Level соответствует установленным в SDK компонентам.Следуя этим рекомендациям, вы сможете восстановить процесс сборки мобильных приложений и избежать конфликтов в инфраструктуре Android-разработки на платформе 1С:Предприятие.