Как собрать мобильное приложение 1С для Android 14 (API 34) и исправить ошибки сборки?

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

С выходом новых версий Android компания Google ужесточает требования к безопасности и функциональности приложений, публикуемых в Google Play. Одно из ключевых требований — использование актуального целевого уровня API. В 2024 году обязательным стал переход на Android 14 (API 34). Для разработчиков на платформе 1С это означает необходимость обновления инструментов разработки и сборки. В процессе этого перехода часто возникают различные ошибки. Разберем по шагам, как подготовить окружение и устранить наиболее распространенные проблемы.

Шаг 1. Подготовка окружения и обновление компонентов 1С

Основная проблема, с которой сталкиваются разработчики, — это использование устаревших версий платформы 1С и сборщика мобильных приложений, которые не поддерживают API 34. Первое сообщение в теме как раз об этом: Google Play прислал предупреждение о необходимости обновиться, а в доступном на тот момент сервисе сборки не было нужной версии.

Ключевое правило успешной сборки: версии всех используемых компонентов должны быть согласованы и поддерживать целевую версию Android. Вам потребуется:

  1. Платформа 1С:Предприятие: Версия 8.3.24 или выше. Именно в этой ветке была добавлена полноценная поддержка API 34 и связанных с ним изменений.
  2. Мобильная платформа: Соответствующая версии основной платформы, например, 8.3.24.хх.
  3. Сборщик мобильных приложений: Также обновленный, например, до версии 8.3.24.49 или выше. Как мы увидим далее, некоторые ошибки исправляются именно в новых релизах сборщика.
  4. Конфигуратор: Для выгрузки файла мобильной конфигурации (.cf) необходимо использовать Конфигуратор той же версии, что и платформа/сборщик (8.3.24+).

Несоблюдение этого правила, особенно пункта о версии Конфигуратора, приводит к первой распространенной ошибке.

Шаг 2. Устранение ошибки «Значение не является значением объектного типа (Use)»

Предположим, вы обновили платформу и сборщик до версии 8.3.24, но при попытке сборки получаете ошибку в логах. Проанализируем ситуацию.

Признаки проблемы:

В логе сборки появляется критическая ошибка ([ERR]) со следующим содержанием:


[ERR ] Значение не является значением объектного типа (Use)
Значение не является значением объектного типа (Use)
{CommonModule.MobileCfgsAndAppsServer.Module(961)}: Return rowPermission.Use;
{CommonModule.MobileApplicationBuilding.Module(5819)}: If Not MobileCfgsAndAppsServer.GetConfigurationPermission(item.Key, "AllIncomingShareRequestsTypesProcessing") Then
{CommonModule.MobileApplicationBuilding.Module(5549)}: MakeMobAppIncomingShareFile(LogFile, vtShareFileTypes, Params.ConfigFileNames, Params.ConfigDirectory);
{CommonModule.MobileApplicationBuilding.Module(1101)}: ProcessIncomingShareFileTypes(LogFile, "android", Params);

Также в логе можно найти очень важное предупреждение ([WARN]):

[WARN] Конфигурация была выгружена конфигуратором версии 8.3.23 или предшествующей версией. Рекомендуется обновить конфигурацию на версию, которая выгружена конфигуратором версии 8.3.24 или последующей версии

Причина ошибки:

Ошибка вызвана несоответствием версий. Сборщик, работающий на платформе 8.3.24, пытается найти в файле конфигурации свойство AllIncomingShareRequestsTypesProcessing. Это новое свойство, которое появилось только в версии 8.3.24 и отвечает за возможность приложения обрабатывать запросы "Поделиться" из операционной системы.

Если выгрузка файла конфигурации (.cf) была сделана из Конфигуратора старой версии (например, 8.3.23), то в этом файле просто нет информации о данном свойстве. Сборщик не находит нужный узел в XML-структуре файла, что приводит к падению с ошибкой "Значение не является значением объектного типа".

Решение:

Необходимо обеспечить, чтобы файл мобильной конфигурации был выгружен из Конфигуратора той же версии, что и используемая для сборки платформа.

  1. Запустите Конфигуратор от платформы 8.3.24 или новее.
  2. Откройте в нем вашу мобильную конфигурацию.
  3. В дереве конфигурации нажмите правой кнопкой мыши на корневой узел и выберите "Свойства".
  4. В свойствах конфигурации найдите раздел "Используемая функциональность мобильного приложения". В нем появятся новые опции, включая "Обработка входящих запросов 'Поделиться'" и "Обработка всех типов входящих запросов 'Поделиться'". Установите необходимые флаги, если эта функциональность вам нужна. Даже если не нужна, важно, чтобы сама структура свойств соответствовала новой версии.
  5. Сохраните конфигурацию и выполните выгрузку в файл .cf: Конфигурация -> Выгрузить конфигурацию в файлы... (иногда требуется выполнение произвольного кода в процессе подготовки).
  6. Используйте этот новый файл для сборки мобильного приложения.

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

Шаг 3. Устранение ошибки «NumberFormatException: Not a number: 33x»

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

Признаки проблемы:

Лог сборки содержит множество предупреждений и в итоге критическую ошибку с таким текстом:


Not a number: 33x: java.lang.NumberFormatException: Not a number: 33x
at com.sun.xml.bind.DatatypeConverterImpl._parseInt(DatatypeConverterImpl.java:125)
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$18.parse(RuntimeBuiltinLeafInfoImpl.java:742)
...
at com.android.repository.impl.manager.LocalRepoLoaderImpl.parsePackage(LocalRepoLoaderImpl.java:313)
...

Причина ошибки:

Эта проблема связана с внутренними механизмами сборщика 1С и его взаимодействием с Android SDK. Google изменил формат версионирования в файлах-описаниях пакетов SDK. Если раньше версия была просто числом (например, "33"), то теперь она может содержать расширения (например, "33-ext4"). Старые версии Java-компонентов внутри сборщика 1С не готовы к такому формату. Они пытаются преобразовать строку "33x" или "33-ext4" в число, натыкаются на нечисловые символы и выбрасывают исключение NumberFormatException.

Решение:

Эта проблема была исправлена фирмой "1С" в обновленных версиях сборщика.
Основное решение — обновить сборщик мобильных приложений до версии 8.3.24.49 или выше. В этих версиях исправлен парсер XML-файлов Android SDK, и он корректно обрабатывает новый формат версий.

В качестве временной меры или если обновление невозможно, можно попробовать использовать более старую версию Android SDK (например, API 31), как было предложено на форуме. Однако это не решит основную задачу — сборку под API 34 — и является лишь диагностическим шагом.

Шаг 4. Устранение ошибки «Invalid keystore format»

Еще одна частая ошибка возникает на финальном этапе сборки — при подписании пакета приложения (APK или AAB), что требует корректной работы с двоичными данными.

Признаки проблемы:

Сборка завершается с ошибкой, в логе которой присутствуют строки:


FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':packageSignRelease'.
> Multiple task action failures occurred:
   > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
      > com.android.ide.common.signing.KeytoolException: Failed to read key key from store "...\\sign.key": Invalid keystore format

Причина ошибки:

Эта ошибка указывает на то, что Gradle не может прочитать ваш файл хранилища ключей (keystore). Наиболее вероятная причина — несоответствие формата файла ключа и версии Java, используемой для сборки.

  1. Формат ключа: Исторически в Java использовался формат JKS (Java KeyStore). Начиная с Java 9, форматом по умолчанию стал PKCS12.
  2. Версия Java: В логе сборки видно, что используется старая версия Java 1.8. Эта версия может не понимать или некорректно обрабатывать ключи, созданные в более новых версиях JDK и сохраненные в формате PKCS12.

Решение:

Необходимо привести в соответствие версию Java и формат ключа.

Последовательно решая эти проблемы, вы сможете успешно собрать ваше мобильное приложение 1С в соответствии с последними требованиями Google Play для Android 14.

← На главную