При разработке и тестировании решений на базе 1С:Мобильной платформы разработчики часто используют быстрый способ запуска: устанавливают на планшет или смартфон универсальное приложение разработчика мобильной платформы и подключают информационную базу через веб-сервер без полной сборки автономного APK-пакета. Однако при попытке настроить и инициализировать встроенные драйверы оборудования (например, внешние компоненты для работы с фискальными регистраторами или сканерами) платформа выдает ошибку: «Не удалось загрузить драйвер устройства». При этом тот же самый драйвер в собранном автономном APK работает штатно.
Разберем детально, почему возникает данная ошибка, как устроена работа внешних компонент в среде Android и какие способы позволяют решить проблему или настроить правильный процесс отладки.
Рассмотрим ключевые технические факторы, которые блокируют запуск внешних компонент драйверов в режиме мобильного приложения разработчика:
dlopen() для динамических библиотек (файлов с расширением .so), расположенных в доступных для записи пользовательских каталогах приложения. Когда конфигурация запускается внутри контейнера разработчика, платформа пытается динамически скачать библиотеку с веб-сервера во временную рабочую папку и загрузить ее в память, что блокируется политиками безопасности ОС. В автономном APK-пакете библиотеки распаковываются в защищенный системный каталог lib/<архитектура>/, откуда динамическая загрузка разрешена.android.permission.USB_PERMISSION), Bluetooth, определение местоположения для сканирования беспроводных сетей и доступ к сетевым сокетам. В универсальном контейнере разработчика активирован только базовый набор прав, тогда как при индивидуальной сборке пакета нужные разрешения явно указываются в манифесте приложения./Android/arm/). Если на веб-сервере (IIS, Apache) не зарегистрированы соответствующие MIME-типы, сервер вернет ошибку (404 или 403), и файл драйвера не будет получен клиентом.armeabi-v7a, arm64-v8a, x86). Если двоичный макет внешней компоненты содержит библиотеки только для 32-битной архитектуры arm, а на устройство установлен 64-битный клиент разработчика, загрузка библиотеки завершится сбоем.Если для работы конфигурации критично использование механизма публикации через веб-сервер, проанализируем настройки сервера. Веб-сервер должен корректно отдавать файлы библиотек мобильной платформе.
Разберем по шагам добавление MIME-типов для веб-сервера:
httpd.conf или .htaccess).Расширение: .so — Тип MIME: application/octet-stream
Расширение: .apk — Тип MIME: application/octet-stream
Расширение: .a — Тип MIME: application/octet-stream
Расширение: .dylib — Тип MIME: application/octet-stream
http://адрес_сервера/MobileApp/Android/arm/driver.so). Файл должен успешно скачиваться без ошибок 404 или 403.Полноценная работа низкоуровневых внешних компонент Native API (Bluetooth, USB, фискальные регистраторы) гарантируется только в составе собранного и установленного APK-пакета приложения. Чтобы не терять возможность интерактивной отладки кода при работе с реальным оборудованием, настроим отладочную сборку.
Выполним следующие шаги:
adb install) или передав файл на планшет.adb forward tcp:9222 tcp:9222
Если ошибка сохраняется даже в собранном APK, выясним причину внутри самого драйвера:
manifest.xml или info.xml) и состав скомпилированных библиотек. Убедимся, что внутри архива присутствуют папки для архитектур Android-arm и Android-arm64.