Заметки из Зазеркалья

13.05.2016

Внешние компоненты в мобильном приложении

Реализовано в версии 8.3.9.1818.

Для мобильной платформы мы реализовали механизм внешних компонент. Он позволяет вам создавать внешние компоненты по технологии Native API аналогично тому, как это делается в платформе для персональных компьютеров. Конечно, есть некоторые особенности, связанные с мобильными операционными системами. Но в целом всё очень похоже.

Разрабатывая внешнюю компоненту, вы должны создать её варианты для всех интересующих вас операционных систем, и для всех процессоров мобильных устройств, на которых предполагается её работа. Все эти варианты нужно собрать в ZIP архив, и поместить его в макет конфигурации типа Внешняя компонента (это единственный способ добавить компоненту в конфигурацию). Это новый тип макета, который мы добавили в платформу.

После этого в мобильном приложении вы устанавливаете и подключаете её точно так же, как и в обычной платформе. Например, так:

Когда конфигурация написана, вы через пункты меню Конфигуратора Конфигурация - Мобильное приложение - Записать в файл выгружаете файл 1cem.zip для сборщика мобильных приложений.

В сборщике мобильных приложений мы добавили соответствующую возможность загружать такие архивы:

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

Включение необходимых библиотек в конечные приложения сборщик выполняет автоматически при сборке.

Архив внешней компоненты

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

В ZIP архив могут входить:

  • Варианты компоненты для Windows (x86, ARM);
  • Варианты компоненты для Android (x86, ARM);
    • Дополнительно вы можете включить файл *.apk для кода Java;
  • Варианты компоненты для iOS (ARM и ARM64, объединенные в единый универсальный файл);
    • Важно, что для iOS требуется как динамическая (*.dylib), так и статическая библиотека *.a;
  • Файл MANIFEST.XML с описанием содержимого архива;
  • Дополнительно вы можете включить файл ANDROID_MANIFEST_EXTENTIONS.XML для описания изменений в AndroidManifest.xml, если они необходимы.
  • Также, при необходимости, вы можете включить файл WINDOWS_RT_MANIFEST_EXTENTIONS.XML и / или файл WINDOWS_RT_PHONE_MANIFEST_EXTENTIONS.XML для внесения изменений в AppxManifest.xml.

Особенности для разных операционных систем

Специфика разработки приложений для iOS не позволяет использовать несистемные динамические библиотеки для публикации в AppStore. Поэтому, разрабатывая вариант внешней компоненты для iOS, вам надо иметь файл динамической библиотеки *.dylib для целей тестирования и отладки. А кроме этого вам понадобится бинарный файл *.a для статической линковки, которую выполнит сборщик мобильных приложений.

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

Чтобы разрабатывать вариант внешней компоненты для Windows Runtime, вам потребуется как минимум Windows 8.1 с MS Visual Studio 2013 SP4 (пакет Windows Phone SDK). Результатом разработки должна быть группа динамических библиотек (*.dll) для мобильных устройств и планшетов всех поддерживаемых процессоров.

Разрабатывая вариант внешней компоненты для Android, вы можете писать код на языке программирования c++, а так же можете использовать технологии Java Native Interface. Результатом разработки должна быть группа динамических библиотек (*.so) для всех поддерживаемых процессоров. А если вы используете код Java, то должен присутствовать файл *.apk

Во время публикации приложения в настройках http-сервера необходимо добавить типы MIME для следующих расширений: .so, .apk, .dylib, .a. Тип MIME: application/octet-stream.

Ограничения

Функциональность внешних компонент для мобильных приложений имеет ряд ограничений:

  • Нельзя использовать пользовательский интерфейс;
  • Запрещен вызов следующих методов из системного потока:
    • bool ADDIN_API Confirm(const WCHAR_T* queryText, tVariant* retVal);
    • bool ADDIN_API Alert(const WCHAR_T* text);
    • Причина заключается в том, что показ модальных окон в таком случае может вызвать «зависание» приложения;
  • Для Windows Runtime не реализована возможность загрузки динамических библиотек из публикации http-сервера.

Примеры

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

Во-первых, мы добавили шаблон внешней компоненты для мобильной платформы. Он облегчит вам создание компоненты “с нуля”. А во-вторых, мы добавили пример использования в конфигурации готовой внешней компоненты, разработанной с использованием технологии Native API. С описанием его свойств, методов и событий.

Рассказать друзьям: