Фреймворк Multi-OS Engine — технология Intel, предназначенная для разработки кросс-платформенных мобильных приложений для iOS и Android из-под Windows или OS X. Работая с Multi-OS Engine, ты можешь использовать весь свой опыт разработки на Java для создания iOS-приложений (Android подразумевается по умолчанию). По сути, Multi-OS Engine представляет собой плагин для среды разработки Android Studio. При этом для каждой из платформ на выходе получаются нативные приложения, которые выглядят и взаимодействуют специфическим для определенной операционной системы образом.

 

Intro

В зачаточном виде Multi-OS Engine была представлена летом прошлого года. Почти за год эта технология развилась во вполне сформировавшуюся программную систему и достигла пререлизной версии. Пока она полностью бесплатная, поэтому имеет смысл обратить на нее свое внимание :). Multi-OS Engine входит в пакет инструментов INDE (Integrated Native Developer Experience), который состоит из всевозможных компиляторов, отладчиков, средств профилирования, пакетов разработчика, библиотек и других тулз, помогающих в разработке высокопроизводительных нативных приложений для любой поддерживаемой платформы, где установлен процессор от Intel.


Команда разработки этого фреймворка размещается преимущественно в Москве и Нижнем Новгороде.

Ближайший конкурент Multi-OS Engine — Xamarin, теперь встроенный в Visual Studio для Windows и по-прежнему тусующийся в системе программирования Xamarin Studio в OS X. В конце марта, когда случился Build 2016, Xamarin объявила, что снимает все ограничения со своих бесплатных инструментов на построения приложений, в том числе на их размер. Это также касается интегрированных в Visual Studio (любых версий) инструментов. Совпадение? Не думаю. Несмотря на то что Xamarin также создает нативные приложения для iOS и Android, использует он при этом C#. Ни о каких сравнительных тестах мне пока не известно, поэтому на данный момент все ограничивается субъективным выбором любимого языка и среды разработки.

Multi-OS Engine полностью избавляет от использования Obj-C при разработке приложений для iOS. Это достигается путем генерации связующего Java-кода на основе заголовков Obj-C и C. Кроме того, Multi-OS Engine поддерживает использование Java-аннотаций, а связь Java-кода с нативным посредством библиотеки NatJ избавляет от необходимости вызовов JNI. Вдобавок фреймворк содержит подготовленные jar-файлы для взаимодействия с iOS API. Тем самым он полностью покрывает последний.

 

Подготавливаем среду разработки

Поскольку в Windows нет iOS-симулятора, я буду проводить сегодняшние эксперименты в среде OS X. Однако даже если у тебя нет макинтоша, действия в ОС Windows будут такими же. Кроме того, чтобы построить приложение для iOS из Windows, можно воспользоваться облачным сервисом — смотри об этом на врезке, а я пока перейду к обзору инструментов.

В первую очередь тебе понадобится Android Studio. Плагин Multi-OS Engine поддерживается версиями начиная с 1.2, но мы воспользуемся последней имеющейся в наличии. На момент написания статьи это была 2.1.1. Итак, переходим на сайт Android Studio и качаем последнюю версию пакета. Прежде чем приступить к установке, проверь версию Java SDK, установленную на твоем маке (javac -version в терминале), и, если она ниже 1.8, обнови. Далее двойным щелчком по пакету dmg запусти установку. В появившемся окне перетащи Android Studio в папку Application.

После запуска Android Studio тебе будет предложено провести стандартную настройку студии: скачивание и установка инструментов SDK, Android-платформ и инструментов построения. В общем, все обычно.

Перейдем к установке непосредственно плагина. Его можно скачать со страницы. На ней нажми кнопку Get Multi-OS Engine, заполни форму, указав валидный email, имя, фамилию — по желанию, нажми Submit, на следующей странице выбери свою целевую операционную систему и жми Download Now. В моем случае операционная система OS X, следовательно, установочный пакет для нее я и качаю. В установке плагина также нет ничего сверхъестественного: двойным кликом по файлу m_multi_os_engine-1.0.648 открываем установочный диск, откуда выбираем Multi-OS Engine Installer 1.0.648. Запустится инсталлятор, на первой странице которого надо ввести пароль администратора, потом будет окно приветствия, окно для задания путей к инструментам: JDK, Android SDK, Android Studio, затем подтверждение и, наконец, установка. После этого можно запускать студию и пользоваться средствами плагина.


В случае открытия внешних проектов может понадобиться установить дополнительные SDK. Android Studio проведет установку автоматом. Также Android Studio предложит обновить инструменты Gradle.
 

Разработка простого кросс-платформенного приложения

 

Android-версия

Соберем минимальное кросс-платформенное приложение, чтобы почувствовать принципы работы с Multi-OS Engine. По сути, кросс-платформенное приложение для iOS и Android состоит из платформозависимых модулей для конкретной операционной системы и общего кода, часть которого может составлять 60%. Остальные 40% приходятся на пользовательский интерфейс, который по определению специфичен для каждой операционной системы.

Пусть наше минимальное приложение имеет общий модуль на Java, который используется в двух смежных проектах Multi-OS Engine на Android и на iOS. Создай новый Android-проект в Android Studio. В мастере на втором шаге выбери подходящую версию SDK. Для тестирования на реальном девайсе я возьму API 19: Android 4.4 (KitKat), поскольку Android-эмуляторы на OS X работают крайне медленно. А на странице выбора добавляемой активности укажи Empty Activity.

Теперь перейдем к созданию модуля общей функциональности. С помощью контекстного меню (на iOS-модуле) New → Module открой окно Create New Module, там выбери пиктограмму Java Library. На следующем шаге задай имя библиотеки и Java-класса, в моем случае это сommon и commonLogic. После создания дополнительного модуля позволь системе Gradle синхронизироваться. Сейчас надо написать функциональность, которая будет одинаково служить обоим приложениям, то есть общую функциональность. Для примера пусть возвращает строку. Открой файл с кодом (в моем случае: common → java → com.example → commonLogic). Там имеется класс commonLogic, вставь в него следующий код:

private String line;
public commonLogic(){
   line = "Xakep";
}
public String getLine(){
   return line;
}

Все очень просто, объявляем переменную, в конструкторе инициализируем ее, в методе getLine возвращаем ее значение.

Теперь в Android-приложение просто добавим кнопку, в результате клика по которой обратимся к модулю общего кода и выведем его на экран девайса. Открой activity_main.xml в режиме дизайнера. В визуальном редакторе добавь кнопку, перейди в редактор кода (MainActivity.java), в раздел импортирования добавь

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Юрий Язев

Юрий Язев

Широко известен под псевдонимом yurembo. Программист, разработчик видеоигр, независимый исследователь. Старый автор журнала «Хакер».

Check Also

Исходный кот. Как заставить нейронную сеть ошибиться

Нейросети теперь повсюду, и распознавание объектов на картинках — это одно из самых популя…

2 комментария

  1. Аватар

    tisknoi

    08.06.2016 at 17:26

    На официальном сайте не сказано о нативной поддержке периферии GPU.
    Разработчик должен её самостоятельно определять или фреймворк уже имеет готовую реализацию?

    Пример: пишем видео-плеер.
    Для этого можно использовать как софтварный(тот что есть в системе), так и хардварный декодер (Intel Quick Sync Video) кодека h264.
    Пусть на используемом устройстве Android есть такая периферия, будет ли она использована нативно или нужно будет что-то докручивать (в данном примере нужно будет использовать libva)?

    В случае если нужно что-то докручивать, то поддержка периферии лежит на плечах ОС (драйверная часть + сборка библиотек), что очень странно, т.к. для собственных чипов можно было сделать кроссплатформенные библиотеки, не зависящие от ОС.

    Смотрел тут:
    https://software.intel.com/en-us/intel-multi-os-engine-docs
    ответа не нашел.

    Собрав простенький плеер с помощью multi-os-engine никакого хардварного декодирования не увидел.

    Заранее спасибо.

  2. Юрий Язев

    Юрий Язев

    08.06.2016 at 19:43

    У Intel есть кросс-платформенный набор инструментов INDE, куда, собственно, входит Multi-OS Engine, в этом наборе присутствую разные sdk, в том числе то, что нужно тебе

Оставить мнение