Как решить проблемы при сборке и публикации мобильного приложения 1С в Google Play (REQUEST_INSTALL_PACKAGES, устаревшие SDK, JDK/Gradle)?

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

При работе с мобильными приложениями, разработанными на платформе 1С и предназначенными для публикации в Google Play, разработчики регулярно сталкиваются с вызовами, связанными с постоянно меняющимися требованиями Google к безопасности, конфиденциальности и используемым библиотекам. Эти требования могут приводить к предупреждениям, а затем и к блокировке возможности публикации обновлений или даже к удалению приложения из магазина. Мы рассмотрим наиболее частые проблемы, возникшие у коллег, и способы их решения.

1. Устранение нарушения разрешения REQUEST_INSTALL_PACKAGES

Одной из первых проблем, с которой мы можем столкнуться, является предупреждение от Google Play относительно использования разрешения REQUEST_INSTALL_PACKAGES. Google ужесточил правила использования этого разрешения, требуя, чтобы оно было напрямую связано с основной функциональностью приложения, такой как установка пакетов, инициируемая пользователем. Если ваше приложение не является веб-браузером, файловым менеджером, корпоративным инструментом для управления устройствами или аналогичным приложением, то, вероятно, использование этого разрешения будет расценено как избыточное и потенциально опасное.

Как проверить и устранить нарушение:

  1. Проанализируйте необходимость разрешения: Прежде всего, выясните, действительно ли ваше мобильное приложение 1С нуждается в разрешении REQUEST_INSTALL_PACKAGES. Часто это разрешение включается по умолчанию или используется для функций самообновления, которые могут быть реализованы иначе или не нужны в текущей версии.
  2. Ознакомьтесь с рекомендациями 1С: Фирма "1С" ранее выпускала рекомендации, где советовала разработчикам либо отключить мобильную функциональность "Установка приложений", если она не является основной, либо подробно задокументировать ее использование в описании приложения в Google Play. Если функциональность нужна для установки внешних приложений, которые по смыслу являются внешними компонентами, рассмотрите возможность переписать их с использованием технологии внешних компонент.
  3. Отключите опцию в конфигурации: Если вы определили, что разрешение вам не нужно, перейдите в конфигурацию мобильного приложения на платформе 1С. Найдите и отключите соответствующую опцию, которая включает REQUEST_INSTALL_PACKAGES. Пользователь на форуме успешно решил эту проблему именно таким способом. После этого, повторно соберите приложение и попробуйте загрузить его в Google Play.

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

2. Управление версиями JDK и Gradle для успешной сборки

Следующий этап, который может вызвать сложности при обновлении мобильного приложения, — это проблемы совместимости между версиями Java Development Kit (JDK) и Gradle, используемыми для сборки. Мы видели, как коллеги столкнулись с ситуацией, когда сборщик 1С имел ограничение на версию Java (например, "Версия Java c 8.0 по 18.99"), а новые версии Gradle требовали более свежего JDK, или наоборот, новейший JDK не поддерживался старым Gradle.

Как обеспечить совместимость JDK и Gradle:

  1. Определите ограничения сборщика 1С: Изучите документацию или настройки вашего сборщика мобильных приложений 1С, чтобы понять, какие версии JDK он поддерживает. В нашем случае, было ограничение "с 8.0 по 18.99".
  2. Подберите совместимую версию JDK: Если вы работаете с актуальными версиями Gradle (например, Gradle 7.3.3, который упоминался на форуме), вам может потребоваться JDK 17 или новее. Однако, если сборщик 1С не поддерживает такие версии, придется искать компромисс. Пользователь на форуме опытным путем подобрал JDK 12, что позволило обойти проблему. Это означает, что нужно найти версию JDK, которая одновременно удовлетворяет требованиям сборщика 1С и поддерживается версией Gradle, используемой в вашем проекте. Скачивать JDK от Oracle стало сложнее из-за необходимости регистрации и ограничений по странам, поэтому можно рассмотреть бесплатные дистрибутивы, например, от Microsoft.
  3. Обновите Gradle при необходимости: Иногда, проблема может быть не в JDK, а в устаревшей версии Gradle, которая не понимает новую Java или наоборот. Мы должны убедиться, что используемая версия Gradle совместима с выбранной версией JDK. Это часто означает обновление версии Gradle в файле gradle-wrapper.properties вашего проекта. Современные версии Android Gradle Plugin (AGP) и Gradle могут требовать Java 17 или даже Java 21.
  4. Используйте платформенный сборщик 1С: Одним из самых надежных решений является использование платформенного сборщика 1С. Как отмечают коллеги, он часто самостоятельно управляет версиями библиотек и гарантирует успешную сборку, избавляя нас от "танцев с бубном" и ручного подбора версий JDK и Gradle. Это значительно упрощает процесс и снижает риск ошибок совместимости.

Примечание о сбоях: Если во время сборки возникают ошибки, и вы заметили, что браузер (например, Opera) перестает работать, как это было упомянуто на форуме, это может быть связано с утечками памяти или конфликтами ресурсов. Перезагрузка ПК часто является временным решением подобных проблем, но для систематического решения стоит проанализировать логи ошибок сборки и потребление ресурсов.

3. Обновление устаревших Google Mobile Ads (GMA) SDK

Google Play постоянно обновляет требования к используемым SDK, и одним из наиболее критичных является требование к Google Mobile Ads (GMA) SDK. Нам поступали предупреждения о том, что версии play-services-ads-lite:16.0.0 и play-services-ads:16.0.0 устарели и необходимо перейти на версию 19.3.0+ (а затем и 19.4.0+). Эти предупреждения в конечном итоге превратились в жесткие блокировки, не позволяющие публиковать новые версии приложений.

Решение проблемы с устаревшими GMA SDK:

  1. Официальный ответ 1С: Фирма "1С" подтвердила, что переход на новую версию библиотеки рекламы был реализован в платформе 8.3.24. Это означает, что для полноценной поддержки актуальных требований Google к рекламным SDK, вам необходимо обновить мобильную платформу 1С до версии 8.3.24 или выше (например, до 8.3.25). В этих версиях также повышается целевое API Android до 13 (API 33), что является обязательным требованием Google Play.
  2. Временное решение для старых платформ (8.3.23.68): Если немедленное обновление до 8.3.24 невозможно, 1С предложила временный обходной путь: использовать платформу 8.3.23.68 с выключенной мобильной функциональностью "Реклама". Когда функциональность "Реклама" отключена в конфигурации приложения, сборщик 1С должен исключить рекламные библиотеки из сборки, что позволит опубликовать приложение. Однако, если даже при отключенной функциональности "Реклама" вы продолжаете получать предупреждения, это может указывать на то, что библиотеки все еще каким-то образом попадают в сборку, или же Google сканирует зависимости приложения более глубоко.

Важно: Даже если ваше приложение не использует рекламу напрямую, наличие устаревших рекламных SDK в зависимостях может привести к блокировке. Поэтому обновление мобильной платформы 1С до актуальных версий является самым надежным решением.

4. Настройка сетевой безопасности: Незашифрованный трафик и пользовательские сертификаты

В процессе публикации нам могут поступать предупреждения, касающиеся сетевой безопасности приложения. Наиболее распространенные из них: "Незашифрованный трафик разрешен для всех доменов" и "Ваше приложение принимает сертификаты пользователей во время проверки защищенных подключений". Хотя иногда эти предупреждения могут казаться "некритичными", Google считает их важными для защиты пользовательских данных.

Как обеспечить безопасность сетевого трафика:

  1. Отключение незашифрованного трафика:
    • Причина: Разрешение незашифрованного трафика (HTTP) для всех доменов может привести к перехвату отправляемых или изменению передаваемых данных, что нарушает конфиденциальность пользователей.
    • Решение: Мы должны настроить конфигурацию сетевой безопасности (Network Security Configuration) в Android. Для этого в файле network_security_config.xml (который должен быть создан или изменен в папке res/xml вашего проекта Android) необходимо явно запретить незашифрованный трафик для всех доменов. Мы устанавливаем значение "false" для параметра cleartextTrafficPermitted.
      
      <network-security-config>
          <base-config cleartextTrafficPermitted="false">
              <trust-anchors>
                  <certificates src="system"/>
              </trust-anchors>
          </base-config>
      </network-security-config>
      

      Начиная с Android 9 (API уровня 28), по умолчанию незашифрованный трафик блокируется. Однако для совместимости со старыми версиями Android или если вы явно его разрешали, необходимо внести эти изменения.

  2. Ограничение приема пользовательских сертификатов:
    • Причина: Прием пользовательских сертификатов во время проверки защищенных подключений также может сделать приложение уязвимым для атак "человек посередине" (Man-in-the-Middle).
    • Решение: Если вам необходимо использовать пользовательские сертификаты для отладки или тестирования, мы должны ограничить их доступность только для отладочных сборок. Для этого в файле network_security_config.xml, который мы редактировали выше, мы можем вложить элемент <trust-anchors>, разрешающий пользовательские сертификаты, в элемент <debug-overrides>. Таким образом, эти сертификаты будут доступны, только когда для параметра android:debuggable в манифесте вашего приложения задано значение "true".
      
      <network-security-config>
          <base-config cleartextTrafficPermitted="false">
              <trust-anchors>
                  <certificates src="system"/>
              </trust-anchors>
          </base-config>
          <debug-overrides>
              <trust-anchors>
                  <certificates src="user"/>
              </trust-anchors>
          </debug-overrides>
      </network-security-config>
      

      Это позволит нам безопасно отлаживать приложение, не компрометируя безопасность продакшн-версии.

Важно: Эти настройки критически важны для защиты конфиденциальности пользователей и обеспечения соответствия вашего приложения современным стандартам безопасности.

5. Решение проблем с мобильной камерой и сканированием штрихкодов

Некоторые коллеги столкнулись с проблемой, когда мобильная камера и функциональность сканирования штрихкодов перестали работать после обновления приложения, при этом в старых APK-файлах всё работало. Это может быть связано с изменениями в API Android или в самой мобильной платформе 1С, влияющими на взаимодействие с аппаратными средствами устройства.

Как восстановить работу камеры и сканирования:

  1. Анализ сообщений об ошибках: Если камера перестала работать, необходимо внимательно изучить логи устройства (logcat) или сообщения об ошибках, которые выдает приложение. Это поможет нам понять первопричину сбоя. Возможно, изменились требования к разрешениям камеры или к способам доступа к ней на более новых версиях Android.
  2. Обновление мобильной платформы 1С: 1С постоянно работает над улучшением своей мобильной платформы и исправлением ошибок.
    • В версии 8.3.24 была реализована доступность объектов ДанныеМультимедиа и ПараметрыКачестваСканированияДокументов на сервере мобильной платформы, что может быть связано с работой камеры и сканированием.
    • В версии 8.3.25 было улучшено окно сканирования кодов и качество самого сканирования. Если вы используете старую платформу, обновление до 8.3.25 или более новой версии может решить проблему с камерой и штрихкодами.
  3. Проверка разрешений: Убедитесь, что ваше приложение корректно запрашивает и получает все необходимые разрешения для использования камеры во время выполнения (runtime permissions), особенно для Android 6.0 (API 23) и выше.

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

6. Обновление библиотеки Google Play Billing

Еще одна важная проблема, которая может возникнуть, — это предупреждение об использовании устаревшей версии библиотеки Google Play Платежей (Google Play Billing Library). Google требует использования версии 6.0.1 или новее к определенной дате (например, к 31 августа 2024 года), иначе обновления для приложения будут отклоняться.

Как обновить библиотеку Google Play Billing:

  1. Изучение требований Google: Регулярно проверяйте официальную документацию Google Play Billing Library на предмет актуальных требований и рекомендуемых версий. Версия 6.0.1 была выпущена в июне 2023 года, а затем появились версии 7.x.x и 8.x.x.
  2. Обновление мобильной платформы 1С: В большинстве случаев, обновление этой библиотеки происходит вместе с обновлением мобильной платформы 1С. Вам необходимо убедиться, что используемая версия платформы 1С (например, 8.3.25.49 или новее) включает в себя актуальную версию Google Play Billing Library. Мы должны отслеживать релизы 1С и их описания, чтобы быть в курсе, когда конкретная версия платформы начнет поддерживать новые требования Google.
  3. Проверка сторонних SDK: Если ваше приложение использует сторонние SDK или библиотеки для платежных функций, убедитесь, что они также обновлены до совместимых версий.

Важно: Несоблюдение требований к Google Play Billing Library напрямую влияет на возможность монетизации вашего приложения и его дальнейшего обновления в Google Play.

7. Общие рекомендации и использование платформенного сборщика

Для успешной и беспроблемной работы с мобильными приложениями 1С и их публикацией в Google Play, нам необходимо придерживаться нескольких общих, но очень важных рекомендаций.

  1. Используйте платформенный сборщик 1С: Как мы уже упоминали, коллеги настоятельно рекомендуют использовать платформенный сборщик 1С. Он значительно упрощает процесс сборки, автоматически управляя совместимостью различных библиотек, версий JDK и Gradle, а также других зависимостей, что гарантирует успешное создание установочных файлов. Это избавляет нас от необходимости вручную настраивать окружение и решать конфликты версий.
  2. Переход на формат Android App Bundle (AAB): Google Play теперь требует загружать приложения в формате Android App Bundle (AAB) вместо традиционных APK-файлов. Это позволяет создавать более компактные приложения, оптимизированные для различных устройств и конфигураций. Мы должны убедиться, что наш процесс сборки генерирует AAB-файлы для публикации.
  3. Регулярное обновление мобильной платформы 1С: Наиболее частой причиной проблем с публикацией являются устаревшие версии мобильной платформы 1С, которые не соответствуют новым требованиям Google. Регулярно обновляйте платформу 1С до актуальных версий (8.3.24, 8.3.25 и выше). Каждая новая версия приносит не только исправления ошибок и улучшения, но и поддержку новых требований Google API, SDK, а также целевого уровня API Android (targetSdkVersion). Например, версия 8.3.27.64 мобильной платформы от 1С также поддерживает требование Google Play о размере страниц 16 КБ для Android 15+.
  4. Внимательно относитесь к политике Google Play: Мы должны постоянно отслеживать изменения в политиках Google Play. Google регулярно обновляет свои требования к конфиденциальности, безопасности, используемым SDK и форматам приложений. Своевременное реагирование на предупреждения и плановые обновления платформы 1С помогут избежать критических проблем.
  5. Заполняйте информацию о приложении: Убедитесь, что все поля в профиле приложения в консоли Google Play заполнены корректно: обновлены скриншоты и рекламные изображения (сейчас Google требует белый фон), краткое наименование не совпадает с полным, заполнены все необходимые опросы о функциональности и конфиденциальности.

Заключение: Успешная публикация мобильных приложений 1С в Google Play требует не только качественной разработки, но и постоянного внимания к меняющимся требованиям экосистемы Android и Google Play. Мы должны рассматривать процесс обновления платформы 1С не как разовую акцию, а как непрерывную работу по поддержанию актуальности и соответствия всем стандартам.

← На главную