При сборке мобильного приложения на платформе 1С:Предприятие разработчики часто сталкиваются с ошибками на этапе выполнения скриптов сборки. Одной из наиболее распространенных проблем является несовместимость версий установленного Java Development Kit (JDK) и инструментов автоматизации сборки Gradle, которые используются внутри сборщика 1С. В данной статье мы подробно разберем, почему возникает ошибка Could not determine java version, и как правильно настроить окружение для успешного получения APK-файла.
Рассмотрим ситуацию: при запуске сборки в логе появляется сообщение FAILURE: Build failed with an exception. * What went wrong: Could not determine java version from '10.0.1'.. Эта ошибка возникает не в самой платформе 1С, а в утилите Gradle, которая управляет процессом компиляции Android-приложения.
Дело в том, что старые версии сборщика мобильных приложений 1С (например, версии 2.0.7) используют Gradle версии 3.3 или аналогичные. В этих версиях Gradle алгоритм определения версии Java жестко завязан на формат вывода номера версии. Когда Java изменила схему именования (переход от формата 1.8 к формату 9, 10, 11), старый Gradle перестал понимать, какая версия JDK установлена в системе, и выдает ошибку.
Важный технический нюанс: начиная с Java 9, многие библиотеки (например, JAXB, ответственный за работу с XML) были вынесены в отдельные модули или помечены как устаревшие. Ошибка javax/xml/bind/annotation/XmlSchema, которая часто следует за проблемами с версией Java, прямо указывает на то, что Gradle пытается найти нужные классы в составе JDK, но в новых версиях Java их больше нет «из коробки». Единственным стабильным решением для сборщиков 1С тех лет является использование Java 8 (JDK 1.8).
Проанализируем последовательность действий для исправления ситуации с Java:
JAVA_HOME должна указывать строго на каталог установки JDK 8. Например: C:\Program Files\Java\jdk1.8.0_202.bin каталогу Java 8 стоит выше в списке переменной Path, чем любые другие упоминания Java.После смены версии Java обязательно перезапустите сборщик мобильных приложений 1С, чтобы он подхватил новые пути.
Иногда после исправления ошибки с Java появляется предупреждение: NDK is missing a "platforms" directory. Выясним причину этого поведения. Современные версии Android NDK (начиная с версии r17) изменили внутреннюю структуру папок, удалив подкаталог platforms. Сборщик 1С, ожидая старую структуру, выдает ошибку конфигурации проекта.
Если ваше мобильное приложение не использует внешние компоненты, написанные на C++, вы можете просто очистить путь к NDK в настройках сборщика 1С. В большинстве случаев для типовых задач (бизнес-приложения на управляемых формах) NDK вообще не требуется. Если же он необходим, скачайте старую версию NDK (например, r16b или r10e) и укажите путь к ней.
Разберем ситуацию, когда возникает ошибка Could not find common.jar (android.arch.core:common:1.1.0). Это означает, что Gradle не может найти необходимые библиотеки поддержки Android локально в вашем SDK.
Для решения этой проблемы выполним следующие действия в Android SDK Manager:
Extras. Именно там хранятся локальные копии библиотек .jar и .aar.SDK Platform для Android 8.1.Проанализировав опыт успешных сборок, можно выделить «золотой стандарт» окружения для платформы 1С версии 8.3.12 и сборщика 2.0.7:
Посмотрим на пример правильно настроенных путей в системных переменных, которые гарантируют стабильную работу сборщика:
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.8.0_144
ANDROID_HOME = D:\Android-SDK
Path = %JAVA_HOME%\bin;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;...
Важное замечание по путям: Старайтесь избегать пробелов в путях к SDK и JDK. Несмотря на то что современные системы их поддерживают, скрипты make.bat и gradlew.bat, генерируемые 1С, могут некорректно обрабатывать пути вида C:\Program Files\.... По возможности устанавливайте инструменты в корневые папки без пробелов, например C:\Java8\ или D:\AndroidSDK\.
Таким образом, успех сборки мобильного приложения 1С зависит не от «новизны» софта, а от строгого соблюдения совместимости версий. Использование Java 8 является критически важным условием для работы внутреннего инструментария Gradle в старых и средних версиях платформы 1С.