Country not specified
Unknown website Share

Apps4all

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

​Готовим NDK-проект к компиляции для различных целевых платформ

Ранее в этом году Golden Hammer Software отправилась в Нью-Йорк, чтобы присутствовать на Intel Android CodeFest. Мы обновили игры Big Mountain Snowboarding, Trick Shot Bowling и Scribble Worm, чтобы они работали в нативном режиме на устройствах Intel Android в течение всего уикенда. Все игры используют C++ посредством NDK.

Приложения на базе Java не требуют каких-либо дополнительных работ для запуска на устройствах Intel. Приложения C++, скомпилированные для ARM, будут выполняться на устройствах Intel благодаря рантайм интерпретатору. Более требовательные к процессорным ресурсам приложения C++ получат преимущества от кросс-компиляции для ARM и x86. Нативный x86-код должен быть быстрее и более эффективным на устройстве x86. Эта статья демонстрирует шаги, требуемые для подготовки NDK-проекта к компиляции для различных целевых платформ.

Компилирование C++ для различных архитектур

Первым делом необходимо отредактировать файл Application.mk, добавив дополнительные платформы в APP_ABI. Вполне возможно поставить здесь «all», чтобы создать файл .so для каждой архитектуры, поддерживаемой Android, но при этом время компиляции может сильно возрасти. Если только вы не используете специальные вызовы api armv7, x86 и armeabi должно быть достаточно. Получится два файла .so. К сожалению, это все равно увеличит время компиляции вдвое. 

Application.mk

APP_ABI := x86 armeabi

Линковка файлов .soс Java-проектом

Обафайла .so будутсозданывкаталоге [ndk project dir]\libs\armeabi и [ndk project dir]\libs\x86. Они должны быть скопированы в разные директории вашего Android-java-проекта.

Каждый раз для компиляции мы используем простой файл bat для копирования файлов. Этот файл обитает в папке NDK\[Project]\jni

CMD /C ..\..\..\..\..\..\contrib\android-ndk-r9c\ndk-build

copy ..\libs\armeabi\libGHBowling.so ..\..\..\GHBowling\libs\armeabi\libGHBowling.so

copy ..\libs\x86\libGHBowling.so ..\..\..\GHBowling\libs\x86\libGHBowling.so

Поддержка различных библиотек C++

Наши игры используют различные библиотеки C++. У нас есть независимый от игры код в одной библиотеке и игровой код во второй библиотеке. Игровая библиотека требует привязки к независимой от игры библиотеке. Мы, конечно, могли бы добавить конкретный относительный путь от одного проекта к другому, поддерживая исключительно ARM, однако файл Android.mk должен быть обновлен, когда речь идет о многочисленных целях. $(TARGET_ARCH_ABI) будет захватывать нужную библиотеку на каждом отрезке компиляции.

Android.mk

include $(CLEAR_VARS)

LOCAL_MODULE := libGHEngine

LOCAL_SRC_FILES := ../../GHEngine/obj/local/$(TARGET_ARCH_ABI)/libGHEngine.a

include $(PREBUILT_STATIC_LIBRARY)

Различия компиляторов

Я рекомендую проводить тесты на актуальном устройстве Intel Android. Есть едва различимая разница компиляторов. У нас был сбой нулевого указателя, который не выявлялся до компиляции под x86. Это была серьезная ошибка, существовавшая на всех платформах. Но каким-то образом другим компиляторам удавалось создавать код, который мог функционировать при обращении за пределы памяти. Когда мы запустили x86 Android-код на планшете Samsung Intel Android, игра вылетала со старта, пока мы не обнаружили и не исправили проблему.

Выводы

Intel разработал серию инструментов, чтобы сделать разработку на Android проще. Их вы можете найти здесь: https://software.intel.com/en-us/android/tools. Они включают эмулятор, графический профайлер, кросс-платформенную библиотеку и полный игровой движок. Также очень полезным для нас оказалось участие в программе Intel Android Showcase.

Поддержка Intel Android в вашем C++ приложении – процесс несложный. Библиотеки ARM C++, неплохо работают без модификации, но даже пара простых изменений в make-файле сделает работу более эффективной. Java-приложения не требуют никаких изменений для поддержки нового оборудования.

Об авторе

Дэвид Уингроув имеет 4 года опыта в создании Android-приложений и 14 лет опыта в разработке игр. Он является сооснователем Golden Hammer Software, выпуская игры для Аndroid, Wii, PC, iOS, Blackberry и других платформ. 

 
Intel
программирование
разработчикам
0 0 0

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