Country not specified
Unknown website Share

Apps4all

Страна: -
Город: -
Был онлайн: -
О себе:
 
08-07-2016, 11:06
Apps4all

Короткий инструктаж по применению поддержки x86 в Android-приложениях

После участия в конкурсе Intel Android CodeFest я решил сделать инструкцию по подготовке своей игры Planet Conqueror к работе на Android-устройствах на базе процессоров Intel. Игра использует фреймворк libGDX. На мой взгляд, такая статья поможет другим разработчикам, использующим этот же фреймворк, реализовать поддержку архитектуры x86 в своих приложениях и избежать ошибок в процессе достижения данной цели.

Меня зовут Антонио де Фалько, я – создатель игры PlanetConqueror. Я окончил университет как гейм-дизайнер, обнаружив в себе склонности к разработке игр, в которые легко вовлечься и которые приносят нескончаемое удовольствие от процесса. Первоначально я подошел к этому как к развлечению. Я рассматривал это как эксперимент, который мог бы помочь сделать относительно сложный жанр RTS более доступным для обычных игроков и при этом сохранить баланс привлекательности стратегии. Тем не менее, PlanetConquerorвыросла в приложение, которое однозначно стоило внимания широкой аудитории. Участие в конкурсе CodeFest позволило мне сделать это. Я попал в Топ 5 и выиграл рекламный контракт, который помог мне добиться успеха.

Какое-то время назад я узнал о конкурсе CodeFest. Пока читал о нем, понял, что для участия в конкурсе необходимо приложение с поддержкой x86. Я быстро начал понимать преимущества приложения, которое построено для функционирования на Android-устройствах на базе процессоров Intel. Первым делом стало ясно, что приложения могут работать быстрее, избегая «моста» между ARMи x86. Этот уровень интерпретирования конвертирует нативные ARM-конструкции для работы на архитектуре x86 в процессе выполнения. А это значит, что внушительная доля производительности просто теряется. Еще одно преимущество: работа приложения на эмуляторах с образом системы x86 вместо ARM может также ускорить скорость исполнения. Следовательно, будет исполняться приемлемый временной план тестирований, и весь процесс будет более «гладким» - без промахов и пользовательских ошибок. Для принятия решения было также важным выяснить, сколько x86-устройств используется. Их количество относительно невелико, однако оно быстро растет (https://software.intel.com/en-us/android/get-device). Следующим шагом было понять, насколько сложно будет внедрить нативность x86 в игру на базе фреймворка libGDX. Как оказалось, это вполне просто. Теперь позвольте мне объяснить, как превратить вашу игру в нативную x86-игру. 

Planet Conqueror была построена с использованием libGDX версии 0.9.8 (стабильный релиз), которая не имеет поддержки устройств на базе Intel. К счастью, новая версия фреймворка такую поддержку имеет. Поэтому, прежде всего, нам необходимо загрузить новую версию libGDX (версию 0.9.9 или выше). LibGDX предлагает стабильные протестированные релизы, содержащие незначительное количество ошибок или вовсе их не имеющие. Другой вариант – загрузить «ночные билды», которые имеют большее число опций, но и, возможно, больше ошибок. Если вы готовы рискнуть, можете загрузить один из них или воспользоваться стабильным релизом. Вы найдете оба варианта загрузки здесь: http://libgdx.badlogicgames.com/download.html

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

  • Для начала скопируйте «gdx.jar» из извлеченной папки в папку «libs» вашего проекта.
  • Затем нужно переместить файлы «libgdx.so» и AndroidBackend в папку проекта Android. Скопируйте папки «armeabi», «armeabi-v7a», «x86» и файл «gdx-backend-android.jar» из извлеченной папки в папку «...\вашпроект-android\libs\».
  • Пока вы находитесь в папке библиотек проекта, пройдите в «armeabi» и «armeabi-v7a» и удалите файлы «libandroidgl20.so».
  • В заключение скопируйте и вставьте «gdx-backend-lwjgl.jar», «gdx-backend-lwjgl-natives.jar» и «gdx-natives.jar» из извлеченной папки в папку «“...\вашпроект-desktop\libs\».

Имея поддержку x86, ARMandARMv7, объединенную в один «fatbuild», AndroidOS самостоятельно выберет, какие файлы использовать. Если для своего приложения вы используете расширения libGDX, вам также необходимо скопировать обновленные файлы расширений в ваш проект. В случае с PlanetConqueror, здесь было расширение Freetype, позволяющее загружать файлы шрифтов вместо создания bitmap-шрифтов.

  • Как и до этого, скопируйте папки «armeabi», «armeabi-v7a» и «x86» из «libgdx \extensions\gdx-freetype\» в папку «libs» вашего Android-проекта.
  • Проделайте ту же операцию для «gdx-freetype.jar» и gdx-freetype-natives.jar» в папке «libs».

Теперь, когда первый шаг завершен, вы можете запустить свой IDE. Если вы увидите некоторые ошибки в коде – это связано с изменениями, сделанными в libGDX между двумя версиями. Обратитесь к документации и логам изменений, чтобы устранить ошибки, специфические для вашего приложения.

После этого вы готовы к компиляции с поддержкой x86 и старту тестирования функциональности. Для этого вам необходимо установить эмулятор с образом системы x86 от Intel. Детализированные пояснения как работать с образом системы x86 вы найдете здесь: https://software.intel.com/ru-ru/blogs/2012/06/22/android-2

Я настоятельно рекомендую прочитать статью, указанную выше, поскольку она содержит большое количество дополнительной информации, которую я опущу в этой статье. Так как я работаю с Windows, я пропущу процедуры для других операционных систем. Так что если вы не используете Windows, пожалуйста, обратитесь к ссылке выше. Для старта вашего только что собранного APK на эмуляторе x86, необходимо иметь следующее: Android SDK, который вы, вероятно, уже установили, и компьютер, работающий на процессоре Intel с поддержкой «…Intel VT-x, EM64T и функционала Execute Disable(XD) Bit». Всё это звучит гораздо сложнее, чем есть на самом деле. Мне удалось запустить эмулятор с образом системы x86 на Intel Core 2 Duo E6600, выпущенном впервые в середине 2006 года. Поэтому, если у вас более свежий процессор, значит, все необходимое у вас почти наверняка есть. Эти функциональные возможности должны быть включены в BIOS, но пока не стоит беспокоиться об этом.

Начнем с загрузки Intel HAXM (Hardware Accelerated Execution Manager) отсюда: https://software.intel.com/ru-ru/android/articles/intel-hardware-accelerated-execution-manager

Пройдите в расположение загруженного файла и извлеките и/или выполните «intelhaxm.exe» для начала процесса установки. В процессе установки вы можете увидеть сообщение об ошибке, сигнализирующее о том, что Intel VT-x не включен в BIOS. В этом случае вам нужно прервать установку, перезагрузить компьютер и зайти в BIOS в момент загрузки (пожалуйста, для входа в BIOS обратитесь к инструкции к материнской плате). Там вам необходимо установить «Virtualization Technology» как «Enabled». Сохраните изменения, покиньте BIOS и повторно начните установку IntelHAXM, следуя описаниям выше.

Когда акселератор установлен, нам необходимо создать AVD (Android Virtual Device) с образом системы Intel. Выберите подходящую вам версию Android и загрузите образ здесь: https://software.intel.com/en-us/android/tools (различные версии вы найдете внизу вебсайта). Или используйте Android SDK Manager для удобства. Как только вы запустили ваш(и) образ(ы) системы, запустите AVD Manager из Android SDK Tools «“…\android-sdk\AVDManager.exe» и создайте новый AVD. Настройте новый AVD по вашим потребностям. Единственное, что вам нужно сделать по-другому, это установить «CPU/ABI» в «IntelAtom (x86)», и теперь ваш эмулятор работает с архитектурой x86.

Все, что осталось – протестировать ваше приложение, согласно перечню тестов. Конечно, нет необходимости тестировать всё, если вы уже вполне основательно протестировали ваше приложение. Ограничьте перечень тестов позициями, релевантными вашему CPU. Сделайте сравнение двух билдов на эмуляторе и/или устройстве, чтобы увидеть, насколько велика разница между приложениями.

Процесс применения поддержки x86 в Planet Conqueror был удивительно прост, благодаря фреймворку libGDX. Дело коснулось всего лишь обновления фреймворка, копирования некоторых файлов в проект, и сборка для x86-устройств была готова. С этого момента дело заключалось лишь в тестировании для выявления каких-либо отклонений в процессе работы. Запуск эмулятора x86 был первым шагом, и он был завершен очень быстро благодаря тому, что драйверы для Intel уже были на декстопных машинах. Найти устройство с x86-архитектурой было чуть более сложным, но вполне выполнимым делом. Наконец, никаких неполадок не было обнаружено, и новая версия PlanetConqueror была готова для загрузки в магазин x86-сообщества.

Об авторе

Антонио де Фалько, среди прочего, независимый игровой разработчик для Android-устройств. Антонио закончил Университет со степенью бакалавра в дизайне игр. С момента окончания учебы он работал в Кёльне и Париже, где получил широкий опыт в среде опытных компаний по разработке программного обеспечения. Сейчас Антонио работает в Крефелде, Германия.

Другие дополнительные статьи и ресурсы:
Методика портирования приложений NDKAndroid*
SDK по сжатию нативных библиотек для приложений Android
Будет ли мое Android-приложение работать с ART вместо Dalvik?

 
Intel
разработка
разработчикам
0 0 0

Чтобы оставлять комментарии вам необходимо зарегистрироваться