Почему не собирается мобильное приложение 1С (APK) и возникает ошибка java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder?

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

При попытке выгрузить готовое мобильное приложение (APK) с помощью инструмента Сборщик мобильных приложений разберем частую проблему: процесс сборки завершается с ошибками, а выгруженный архив содержит только каталог Logs без самого файла .apk.

Проанализируем причины возникновения подобного сбоя, изучим лог-файл сборщика и рассмотрим пошаговое решение проблемы.

Анализ лог-файла сборки

Обратимся к журналу сборки, который формирует Apache Ant. В большинстве случаев сбой происходит на самом финальном этапе — этапе подписи готового пакета приложения -release-sign. В логе это выглядит следующим образом:


[info] Начинается сборка
...
 -release-sign:
     [echo] Signing final apk...
 BUILD FAILED
D:\Mobail\android-sdk\tools\ant\build.xml:1135: The following error occurred while executing this line:
D:\Mobail\android-sdk\tools\ant\build.xml:1147: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder
    at com.android.sdklib.internal.build.SignedJarBuilder.<init>(SignedJarBuilder.java:177)
    at com.android.ant.SignApkTask.createOutput(SignApkTask.java:72)
...
Caused by: java.lang.ClassNotFoundException: sun/misc/BASE64Encoder

Как видно из приведенного журнала, инструмент SignApkTask из состава Android SDK Tools обращается к внутреннему классу sun.misc.BASE64Encoder среды исполнения Java, однако этот класс не находится в системе.

Выясним причину ошибки

Рассмотрим подробно, почему возникает исключение java.lang.ClassNotFoundException: sun/misc/BASE64Encoder.

Утилиты подписи APK в старых версиях Android SDK (использующие цепочку вызовов Apache Ant и apkbuilder) опираются на внутренние служебные библиотеки Oracle Java. Начиная с релизов **JDK 9** и выше, внутренний пакет sun.misc был полностью удален и инкапсулирован в рамках модульной системы Java (Project Jigsaw).

Если в системе или настройки сборщика указывают на установленный **JDK 9**, **JDK 10**, **JDK 11** или более свежую версию, процедура подписи мобильного приложения 1С завершится фатальной ошибкой.

Пошаговое решение проблемы

Разберем алгоритм действий, который позволяет успешно собрать и подписать APK-файл.

  1. Удаление несовместимой версии JDK: откройте «Панель управления» -> «Программы и компоненты» в Windows и удалите все версии Java Development Kit новее 8-й (например, JDK 9.0.1 и выше).
  2. Установка JDK 8 (Java 1.8): скачайте и установите дистрибутив JDK 8 (Java SE Development Kit 8). Рекомендуется использовать 64-разрядную версию (например, jdk-8u151-windows-x64 или аналогичный актуальный апдейт JDK 8).
  3. Проверка путей в Сборщике мобильных приложений: откройте базу сборщика 1С и перейдите в настройки окружения. Убедитесь, что в поле пути к JDK указан каталог именно с 8-й версией Java (например, C:\Program Files\Java\jdk1.8.0_151).
  4. Повторный запуск сборки: очистите временный рабочий каталог (Temp) и выполните сборку мобильного приложения повторно.

Рекомендации по настройке окружения для сборщика 1С

Чтобы избежать ошибок при компиляции мобильных приложений 1С, соблюдайте основные правила настройки рабочей среды:

1. Соблюдение матрицы совместимости компонентов: Сборщик мобильных приложений старых версий строго привязан к комбинации JDK 8 (1.8) + Apache Ant 1.9+ + Android SDK Tools 25.2.5 (API Level 23 или требуемый платформой).

2. Проверка корректности путей: Убедитесь, что пути к папкам **Android SDK**, **Apache Ant** и **JDK** не содержат пробелов и кириллических символов.

3. Проверка ключа цифровой подписи: Для подписи приложения в сборщике должен быть создан или указан валидный ключ разработчика (хранилище ключей .keystore или .jks).

После перехода на **JDK 8** этап -release-sign пройдет успешно, и архив сборки сформирует полноценный установочный файл `.apk` вашего мобильного приложения 1С.

← На главную