Ни один серьёзный Android-проект не обходится без сторонних библиотек. Иногда их можно найти в пригодном для целевой архитектуры виде, иногда – нет. Тогда библиотеки приходится готовить самостоятельно, например, собирая из исходного кода.
Из этого практического руководства вы узнаете о библиотеках FMOD, Cocos2D-x, OpenAL и OpenSSL для Android-устройств, построенных на платформе x86. Они, в особенности – первые три, пригодятся тем, кто разрабатывает игры и мультимедийные приложения. А именно, мы поговорим об их настройке, компиляции и использовании в Android-приложениях.
Прежде, чем мы начнём, нужно кое-что подготовить. Если вы уже разрабатываете приложения для Android, вполне вероятно, что большая часть того, о чём идёт речь, у вас уже есть. Однако и в этом случае полезным будет просмотреть предложенный список.
А именно, вам понадобятся следующие программные инструменты.
После того, как всё это у вас есть, нужно отредактировать переменные среды. Или, по крайней мере, проверить их, так как в ходе установки вышеописанных инструментов некоторые из них уже могут оказаться в нужном нам состоянии.
Эти пути должны быть разделены знаком точки с запятой (;). В нашем случае содержимое этой переменной выглядит так:
Обратите внимание на то, что в конце пути к нужной папке не должно быть специальных символов, вроде «/» или «’».
FMOD – это коммерческая библиотека для работы со звуком. Это – набор инструментов, который работает в разных ОС и позволяет воспроизводить звуковые файлы различных форматов. Его используют при реализации звуковой составляющей игр и мультимедийных приложений.
Ниже приведено пошаговое руководство по интеграции библиотеки FMOD в Android-приложение, рассчитанное на платформу x86 с использованием IDE Eclipse.
Для начала нужно загрузить FMOD. В частности, нас интересует Android-версия FMOD Ex Programmer’s API.
Загрузка FMOD Ex
Установка FMOD заключается в распаковке загруженного архива в локальную папку компьютера разработчика.
Для того чтобы работать со звуком посредством API FMOD Ex, нужно включить соответствующую C/C++ библиотеку в приложение и обратиться к ней с использованием механизма jni.
Функциональность FMOD реализована в виде C/C++ библиотек, к которым можно обращаться через jni, с ними можно работать и из C/C++ компонентов разрабатываемого приложения.
Библиотеки FMOD Ex поставляются в виде armeabi и armeabi-v7a сборок для android-3 и в виде x86-сборки для android-9. Найти эти сборки можно по такому пути:
«Родной» аудио-интерфейс Android OpenSL используется по умолчанию для воспроизведения аудио на устройствах, которые его поддерживают (android-9). На таких устройствах дополнительные файлы для работы не требуются. Для тех устройств, которые OpenSL не поддерживают, понадобится применять режим вывода звука Audio Track. Для этого понадобится jar-файл FMOD. Этот файл нужно добавить в Java-приложение для выполнения инициализации и вывода звука через FMOD.
Ниже мы это обсудим.
Обратит е внимание на то, что демонстрационное приложение, которое мы рассмотрим, является частью библиотеки. Его код мы сюда не включаем. Вместо этого здесь показана последовательность действий, необходимая для работы с FMOD, описаны изменения, которые нужно внести в файлы проекта приложения.
Для того чтобы выводить звук с использованием метода Audio Track, в проект приложения нужно включить аудио-драйвер FMOD (реализованный на Java) и инициализировать его. Если используется режим вывода OpenSL, этого делать не нужно.
Для подключения драйвера нужно добавить файл
В классе
Создание данного приложения – это то же самое, что сборка NDK-приложения для Android. Взглянем на пример, для которого мы будем использовать демонстрационное приложение, расположенное по следующему адресу:
Мы будем упоминать эту папку как {$PROJECT DIRECTORY}. Однако прежде чем мы займёмся сборкой, нам нужно выполнить некоторые изменения в демонстрационном приложении.
Теперь откроем Cygwin и выполним следующие задачи для построения приложения:
Проект будет собран и готов для развёртывания.
Обратите внимание на то, что здесь символы «\», которые используются в Windows при указании путей к папкам, заменены на символы «/», которые используются в путях формата GNU.
После успешной сборки проекта в окне Cygwin вы увидите следующие сообщения:
Теперь, после успешного построения проекта, его можно импортировать в Eclipse и подготовить к запуску на Android-устройстве.
Для того чтобы подготовить приложение к запуску с использованием IDE Eclipse, нужно выполнить следующие шаги.
1. Запустите Eclipse и выполните команду File > Import
Команда импорта в Eclipse
2. Выберите параметр Existing Android… и нажмите кнопку Next.
Выбор типа источника для импорта
3. Перейдите в корневую папку проекта (т.е. в ту папку, что мы
Завершение процесса импорта проекта
4. На данном этапе вы заметите на импортированном проекте, в обозревателе проектов, красный восклицательный знак.
Восклицательный знак в обозревателе проектов
5. Для того чтобы решить проблему, на которую этот знак указывает, выполните команду Window > Preferences, вызвав окно настроек. В окне перейдите к набору настроек Classpath Variables.
Окно настроек
6. Щёлкните на странице Classpath Variables кнопку New…, появится окно для настройки новой переменной. Его нужно привести к виду, показанному на рисунке.
Окно настройки параметров новой переменной
7. В поле Name введите
8. Для заполнения поля Path нажмите на кнопку File и найдите следующий файл:
9. Нажмите ОК.
10. Затем снова нажмите ОК, появится окно, показанное ниже. Нажмите в нём кнопку Yes.
Подтверждение полного перестроения проекта
11. Теперь красный восклицательный знак исчезнет, проблема будет решена.
12. Выполните команду Project > Properties.
Выполнение команды для доступа к свойствам проекта
13. В появившемся окне, в разделе C/C++ Build > Environment, нажмите на кнопку Add.
Окно настройки рабочего окружения
14. В появившемся окне, в поле Name, введите ANDROID_NDK_ROOT, в поле Value – полный путь к установленному на компьютере NDK и нажмите ОК.
Настройка переменной, указывающей на NDK
15. Теперь нажмите на кнопку Apply, после чего – на кнопку OK.
Сохранение сведений о пути к NDK
Теперь можно запустить приложение на Android-устройстве. Для того чтобы всё работало как надо, сначала на устройство нужно скопировать, в папку
Обратите внимание на то, что на Android-эмуляторе это приложение может не запуститься.
При сборке приложения, рассчитанного на платформу x86, очень важно внести в проект следующее изменение. Обратите внимание на то, что это делается до начала построения библиотеки.
Материалы, получаемые при сборке, размещаются в папке
Если в ходе построения проекта с использованием NDK появляются сообщения об ошибках, нужно настроить разрешение доступа к файлам. А именно, изменить разрешение на «Полный доступ» («Full Control») для группы «Все» («Everyone»).
Кроме того, обратите внимание на то, что приложение, которое использует рассматриваемые библиотеки, может не запуститься в эмуляторе. Учтите и то, что для его нормальной работы на физическом устройстве нужно скопировать файлы из папок
Fmod, помимо библиотеки Fmod Ex, предлагает продукт Fmod Studio, предназначенный для подготовки звука для компьютерных игр, и соответствующую библиотеку для различных платформ, которая позволяет работать с проектами Fmod Studio. Всё это можно загрузить отсюда.
Для того чтобы быстро получить работающий пример использования Fmod Studio API на Android, вы можете воспользоваться проектом с GitHub Fmod Sample 3D. В частности, в проекте присутствует библиотека, рассчитанная на архитектуру x86. Его можно импортировать в вашу IDE, например — в Android Studio. Если при импорте возникнет ошибка
Запуск демонстрационного приложения на Asus FonePad 8
Многие примеры использования сторонних библиотек в Android-проектах, которые, в частности, можно обнаружить на GitHub, созданы с использованием IDE Eclipse. Их можно импортировать и в Android Studio, однако, в ходе импорта могут возникнуть ошибки.
Например, если системе не удаётся обнаружить NDK – вероятнее всего, неверно указан путь к нему в настройках проекта. Проверить это можно в файле
Если Eclipse-проект содержит ссылки на внешние файлы, которые в вашей копии импортированного проекта неактуальны, Android Studio может отказаться импортировать проект до исправления таких ссылок. Для успешного импорта проекта нужно найти файлы (например –
Рассмотрим теперь процесс создания кросс-платформенного Android-приложения с использованием игрового движка Cocos2d-x для целевой платформы x86.
Приложение-пример, которое используется в этом руководстве, является частью материалов, доступных при загрузке Cocos2d-x. Приложение можно найти в папке
Cocos2d-x – это библиотека, написанная на C++ и портированная на множество платформ. Среди них – iOS, Android, Windows, Marmalade, Linux, Bada и Blackberry 10. В качестве скриптовых языков при работе с игровым движком используются Lua и JavaScript. Подробности о движке можно найти в документации к нему.
Прежде чем приступать к работе с Cocos2D-x, вам нужно подготовить всё необходимое – так, как описано в начале этого материала.
Загрузите свежую версию Cocos2d-x. Обратите внимание на то, что нам нужна обычная, а не html-5 версия движка.
Прежде чем мы продолжим, обратите внимание на несколько переменных, указывающих на пути к различным папкам. Мы будем пользоваться ими ниже:
1. Запустите Eclipse, воспользовавшись исполняемым файлом
2. Создайте рабочее пространство. Мы создали его по адресу
Рабочее пространство Android-проекта
3. Выполните команду File > Import.
Команда импорта
4. Появится окно, похожее на то, что приведено на рисунке.
Окно импорта
5. Разверните раздел Android, выберите пункт Existing Android Code Into Workspace и нажмите кнопку Next.
6. В следующем окне нажмите на кнопку Browse, как показано ниже.
Поиск корневой директории проекта для импорта
7. Найдите папку {$COCOS2D-X PATH}\samples\Cpp\HelloCpp\proj.android, как показано на рисунке, и нажмите OK.
Выбор корневой директории проекта для импорта
8. Для этого демонстрационного примера, прежде чем нажимать на кнопку Finish, проверьте, чтобы флаг Copy projects into workspace не был установлен.
Флаг Copy projects into workspace должен быть сброшен
9. После импорта в Eclipse могут появиться сообщения об ошибках. Пока на них можно не обращать внимания и переходить к следующим шагам.
Обратите внимание на то, что если в будущем вы решите оставить исходный код проекта в неприкосновенности и будете при этом уверены, что импорт кода проекта в рабочее пространство не повлияет на его исполнение, вышеописанный флаг Copy projects into workspace можно установить.
10. Теперь повторите шаги 3 – 8, с той разницей, что вместо импорта
Импорт другого проекта
11. Если сообщения об ошибках, которые возникли на шаге 8, не исчезли, выполните следующие шаги для решения проблем.
12. На закладке Package Explorer, слева, щёлкните правой кнопкой мыши libcocos2dx и в появившемся меню выберите пункт Properties.
Команда для вызова окна свойств проекта
13. В появившемся окне выберите, в левой колонке, пункт Android и проверьте, установлен ли флаг Is Library, как показано на рисунке ниже. Если это не так, установите флаг, нажмите Apply и OK.
Настройка параметров проекта
14. Так же, как было описано выше, откройте свойства проекта HelloCpp, добравшись до окна, показанного на рисунке.
Окно свойств проекта HelloCpp
15. Уберите из раздела Library всё, что отмечено красным крестиком и нажмите кнопку Add.
16. Выберите libcocos2dx и нажмите OK.
Выбор проекта libcocos2dx
17. Теперь вы увидите, что в разделе Library появилось название проекта с зелёной галочкой. После этого можно нажать кнопку Apply, и затем – OK.
Завершение настройки проекта HelloCpp
18. На данном этапе Eclipse выполнит перестроение проекта. Если сообщений об ошибках не появилось, пропустите этот шаг. Если нет – удалите проект HelloCpp из панели Package Explorer. При этом обратите внимание на то, чтобы флаг Delete project contents on disk… не был установлен. Если он будет установлен, данное действие нельзя будет отменить. Теперь снова выполните шаги 3 – 8 и 13 – 16.
Удаление проекта из панели Project Explorer
19. Теперь ваш проект должен выглядеть примерно так, как показано на рисунке.
Проект, готовый к дальнейшей работе
Если вы успешно добрались до этого места – примите поздравления! Проект успешно открыт в IDE Eclipse, всё готово к его сборке.
1. На закладке Package Explorer найдите файл HelloCpp > jni > Application.mk
Файл Application.mk
2. Для того чтобы осуществить сборку для платформы x86, добавьте туда следующее:
Теперь, в главном меню Project, сначала выполните команду Clean…, потом – Build Project.
Очистка и сборка проекта
1. Запустите Cygwin и перейдите к папке демонстрационного проекта HelloCpp, используя следующую команду:
Учитывайте, что путь к папке проекта зависит от
2. Откройте файл /jni/Application.mk. Он должен содержать следующую строку:
3. Для построения проекта, находясь в папке /proj.android, выполните следующую команду:
Если вы столкнётесь с сообщениями об ошибках, проверьте следующее:
После успешного завершения сборки двоичные файлы окажутся в папке
OpenAL (Open Audio Library) – это кросс-платформенный API для работы со звуком. Данная библиотека разработана для эффективного вывода многоканального объёмного звука. Стиль API и соглашения, принятые в нём, намеренно сделаны похожими на OpenGL. Начиная с версии 1.1., компания Creative закрыла код своей реализации. Однако, OpenAL Soft – это широко используемая альтернатива с открытым кодом. Мы будем пользоваться версией OpenAL Soft, адаптированной для Android.
Для работы с OpenAL нам понадобится та же среда, которой мы пользовались в предыдущих примерах.
Для того чтобы работать с OpenAL, нам понадобится исправленный исходный код, который специально адаптирован для Android. Соответствующая версия OpenAL увидела свет благодаря стараниями Мартинса Мозейко (Martins Mozeiko) и Криса Робинсона (Chris Robinson). Спасибо им за это! Для продолжения наших экспериментов загрузите свежую версию кода.
Загрузить всё необходимое можно и другим путём, пользуясь терминалом Cygwin.
Обратите внимание на то, что в случае с Windows-версией Cygwin, директорию
Прежде чем приступать к сборке, создадим обычный Android-проект Hello OpenAL. Будем считать, что путь к папке этого проекта –
Для сборки проекта с использованием OpenAL для Android, нужно выполнить следующие шаги.
1. Для сборки OpenAL понадобится файл config.h. Его надо скопировать из этой папки:
в эту:
Здесь
2. Теперь, когда файл скопирован, скопируйте данную папку OpenAL в папку проекта
3. Мы пользовались файлом
4. Добавьте в следующих шагах native-интерфейс к проекту.
5. Нужно создать два make-файла. Это – Android.mk и Application.mk и поместить их в папку
Для того чтобы настроить проект для платформы x86, проверьте, чтобы в файле Application.mk содержалось следующее:
Файлы, являющиеся результатами сборки, расположены в папке
Объектные файлы – в папке
Рассмотрим сборку библиотек OpenSSL для Android-устройств, построенных на базе архитектуры x86.
Для дальнейшей работы нам понадобится следующее.
Исходный код библиотек OpenSSL для Android можно загрузить из репозиториев eighthave или guardianproject.
Выбрать целевую платформу сборки можно так же, как и для любого другого Android-приложения, используя установки Application Binary Interface (ABI). В нашем случае в файле
Итак, после того, как NDK загружен и установлен, исходный код Android OpenSSL так же загружен и размещён в локальной папке (например, в
Не забудьте указать для сборки целевую платформу x86:
Выполните команду NDK для запуска сборки:
После её успешного завершения будут созданы OpenSSL-библиотеки
Мы рассмотрели вопросы подготовки различных библиотек для использования в приложениях, рассчитанных на Android-устройства, построенные на платформе x86. Это – библиотеки для работы со звуком FMOD и OpenAL, игровой движок Cocos2d-x, криптографическая библиотека OpenSSL. Да, кстати, если вам нужно подготовить для использования в проектах, рассчитанных на архитектуру x86, библиотеку FFMPEG, можете заглянуть сюда.
Освоив приведённый здесь материал, вы не только сможете воспользоваться вышеупомянутыми библиотеками в своих проектах, но и, применяя описанные методики, готовить другие библиотеки так, как вам нужно. Удачного кодинга!
Из этого практического руководства вы узнаете о библиотеках FMOD, Cocos2D-x, OpenAL и OpenSSL для Android-устройств, построенных на платформе x86. Они, в особенности – первые три, пригодятся тем, кто разрабатывает игры и мультимедийные приложения. А именно, мы поговорим об их настройке, компиляции и использовании в Android-приложениях.
Предварительная подготовка
Прежде, чем мы начнём, нужно кое-что подготовить. Если вы уже разрабатываете приложения для Android, вполне вероятно, что большая часть того, о чём идёт речь, у вас уже есть. Однако и в этом случае полезным будет просмотреть предложенный список.
А именно, вам понадобятся следующие программные инструменты.
- Среда разработки Android-приложений. С этой страницы нужно загрузить Android SDK. Мы, приводя практические примеры, используем IDE Eclipse.
- Android NDK.
- Cygwin. В ходе установки, на этапе настройки состава пакетов, нужно выбрать следующие: Autoconf, Automake, binutils, gcc-core, gcc-g++, gcc4-core, gcc4-g++, gdb, pcre, pcre-devel, gawk, make, python. Не забудьте выбрать GNU-версию make, иначе вы не сможете выполнять построение проектов с использованием NDK.
- JDK.
- Apache Ant.
После того, как всё это у вас есть, нужно отредактировать переменные среды. Или, по крайней мере, проверить их, так как в ходе установки вышеописанных инструментов некоторые из них уже могут оказаться в нужном нам состоянии.
- Запишите в переменную среды JAVA_HOME путь, который ведет к установленному Java JDK. В нашем случае это
– C:\Program Files\Java\jdk1.7.0_45
- Запишите в переменную ANDROID_SDK_ROOT полный путь к папке Android SDK. Например, в нашем случае пакет разработчика Android был распакован в папку
D:\android\
, в результате в эту переменную был записан путьD:\android\adt-bundle-windows-x86-20131030\sdk
- В переменную NDK_ROOT нужно записать полный путь к папке, в которой располагаются файлы NDK. В нашем случае – это папка
D:\android\android-ndk-r9b
.
- Переменную Path нужно привести к состоянию, в котором она содержит следующие пути:
– путь к папке JDK;
– путь к папке bin JDK;
– путь к папке NDK;
– путь к папке bin Cygwin;
– путь к папке bin ANT;
– путь к папке tools Android SDK;
– путь к папке platform-tools Android SDK.
Эти пути должны быть разделены знаком точки с запятой (;). В нашем случае содержимое этой переменной выглядит так:
D:\cygwin64\bin;C:\Program Files\Java\jdk1.7.0_40\bin;D:\android\adt-bundle-windows-x86_64-20131030\sdk\tools;D:\android\adt-bundle-windows-x86_64-20131030\sdk\platform-tools;%JAVA_HOME%\bin;%ANT_HOME%\bin
Обратите внимание на то, что в конце пути к нужной папке не должно быть специальных символов, вроде «/» или «’».
FMOD
FMOD – это коммерческая библиотека для работы со звуком. Это – набор инструментов, который работает в разных ОС и позволяет воспроизводить звуковые файлы различных форматов. Его используют при реализации звуковой составляющей игр и мультимедийных приложений.
Ниже приведено пошаговое руководство по интеграции библиотеки FMOD в Android-приложение, рассчитанное на платформу x86 с использованием IDE Eclipse.
Для начала нужно загрузить FMOD. В частности, нас интересует Android-версия FMOD Ex Programmer’s API.
Загрузка FMOD Ex
Установка FMOD заключается в распаковке загруженного архива в локальную папку компьютера разработчика.
Сборка с помощью средств Android NDK
Для того чтобы работать со звуком посредством API FMOD Ex, нужно включить соответствующую C/C++ библиотеку в приложение и обратиться к ней с использованием механизма jni.
Функциональность FMOD реализована в виде C/C++ библиотек, к которым можно обращаться через jni, с ними можно работать и из C/C++ компонентов разрабатываемого приложения.
- Библиотека libfmodex.so используется в готовых к выпуску приложениях.
- Библиотека libfmodexL.so – это та же библиотека с включённым отладочным выводом. Её можно использовать в ходе разработки приложения, при его отладке, для выявления и устранения ошибок.
Библиотеки FMOD Ex поставляются в виде armeabi и armeabi-v7a сборок для android-3 и в виде x86-сборки для android-9. Найти эти сборки можно по такому пути:
{$FMOD INSTALLED PATH}\api\lib\$(ABI)
«Родной» аудио-интерфейс Android OpenSL используется по умолчанию для воспроизведения аудио на устройствах, которые его поддерживают (android-9). На таких устройствах дополнительные файлы для работы не требуются. Для тех устройств, которые OpenSL не поддерживают, понадобится применять режим вывода звука Audio Track. Для этого понадобится jar-файл FMOD. Этот файл нужно добавить в Java-приложение для выполнения инициализации и вывода звука через FMOD.
fmodex.jar
Ниже мы это обсудим.
Обратит е внимание на то, что демонстрационное приложение, которое мы рассмотрим, является частью библиотеки. Его код мы сюда не включаем. Вместо этого здесь показана последовательность действий, необходимая для работы с FMOD, описаны изменения, которые нужно внести в файлы проекта приложения.
Инициализация Java-драйвера
Для того чтобы выводить звук с использованием метода Audio Track, в проект приложения нужно включить аудио-драйвер FMOD (реализованный на Java) и инициализировать его. Если используется режим вывода OpenSL, этого делать не нужно.
Для подключения драйвера нужно добавить файл
fmodex.jar
в проект и импортировать пакет org.fmod.FMODAudioDevice
. Для работы Java-драйвера нужно, чтобы приложение загружало библиотеку fmodex
.В классе
FMODAudioDevice
есть две функции, start ()
и stop ()
, которые нужно вызывать для инициализации системы проигрывания звука и её отключения. Их можно вызывать в любое время и в любом месте, но мы рекомендуем поместить вызовы функций start ()
и stop ()
в переопределённые в вашем проекте методы жизненного цикла объекта класса Activity onStart()
и onStop()
.Приложение-пример для Android-устройства, основанного на платформе x86
Создание данного приложения – это то же самое, что сборка NDK-приложения для Android. Взглянем на пример, для которого мы будем использовать демонстрационное приложение, расположенное по следующему адресу:
{$FMOD INSTALLED PATH}\examples\playsound
Мы будем упоминать эту папку как {$PROJECT DIRECTORY}. Однако прежде чем мы займёмся сборкой, нам нужно выполнить некоторые изменения в демонстрационном приложении.
- Перейдём в папку
{$PROJECT DIRECTORY}/jni
и откроем файлApplication.mk
.
- Изменим этот код:
APP_ABI := armeabi armeabi-v7a
На этот:
APP_ABI := x86
Теперь откроем Cygwin и выполним следующие задачи для построения приложения:
- Обновим переменную PATH в Cygwin:
export PATH=.:/cygdrive/{$PATH TO NDK}:$PATH
- Перейдём в папку проекта:
cd /cygdrive/{$PROJECT DIRECTORY}
- Выполним команду для построения приложения:
ndk-build
Проект будет собран и готов для развёртывания.
Обратите внимание на то, что здесь символы «\», которые используются в Windows при указании путей к папкам, заменены на символы «/», которые используются в путях формата GNU.
После успешной сборки проекта в окне Cygwin вы увидите следующие сообщения:
[x86] Prebuilt
: libfmodex.so <= jni/../../../api/lib/x86/
[x86] Install
: libfmodex.so => libs/x86/libfmodex.so
[x86] Cygwin
: Generating dependency file converter script
[x86] Compile
: main <= main.c
[x86] SharedLibrary
: libmain.so
[x86] Install
: libmain.so => libs/x86/libmain.so
Теперь, после успешного построения проекта, его можно импортировать в Eclipse и подготовить к запуску на Android-устройстве.
Подготовка и запуск приложения в IDE Eclipse
Для того чтобы подготовить приложение к запуску с использованием IDE Eclipse, нужно выполнить следующие шаги.
1. Запустите Eclipse и выполните команду File > Import
Команда импорта в Eclipse
2. Выберите параметр Existing Android… и нажмите кнопку Next.
Выбор типа источника для импорта
3. Перейдите в корневую папку проекта (т.е. в ту папку, что мы
называем {$PROJECT DIRECTORY}
), затем проверьте, чтобы флаг Copy projects… был снят и нажмите Finish.Завершение процесса импорта проекта
4. На данном этапе вы заметите на импортированном проекте, в обозревателе проектов, красный восклицательный знак.
Восклицательный знак в обозревателе проектов
5. Для того чтобы решить проблему, на которую этот знак указывает, выполните команду Window > Preferences, вызвав окно настроек. В окне перейдите к набору настроек Classpath Variables.
Окно настроек
6. Щёлкните на странице Classpath Variables кнопку New…, появится окно для настройки новой переменной. Его нужно привести к виду, показанному на рисунке.
Окно настройки параметров новой переменной
7. В поле Name введите
FMOD_LIB
8. Для заполнения поля Path нажмите на кнопку File и найдите следующий файл:
{$FMOD INSTALLED PATH}/api/lib/fmodex.jar
9. Нажмите ОК.
10. Затем снова нажмите ОК, появится окно, показанное ниже. Нажмите в нём кнопку Yes.
Подтверждение полного перестроения проекта
11. Теперь красный восклицательный знак исчезнет, проблема будет решена.
12. Выполните команду Project > Properties.
Выполнение команды для доступа к свойствам проекта
13. В появившемся окне, в разделе C/C++ Build > Environment, нажмите на кнопку Add.
Окно настройки рабочего окружения
14. В появившемся окне, в поле Name, введите ANDROID_NDK_ROOT, в поле Value – полный путь к установленному на компьютере NDK и нажмите ОК.
Настройка переменной, указывающей на NDK
15. Теперь нажмите на кнопку Apply, после чего – на кнопку OK.
Сохранение сведений о пути к NDK
Теперь можно запустить приложение на Android-устройстве. Для того чтобы всё работало как надо, сначала на устройство нужно скопировать, в папку
fmod
, которая должна располагаться в корневом каталоге SD-карты, два набора демонстрационных файлов:{$FMOD INSTALLED PATH}\examples\media\*
{$FMOD INSTALLED PATH}\fmoddesignerapi\examples\media\*
Обратите внимание на то, что на Android-эмуляторе это приложение может не запуститься.
Настройки, специфические для платформы x86
При сборке приложения, рассчитанного на платформу x86, очень важно внести в проект следующее изменение. Обратите внимание на то, что это делается до начала построения библиотеки.
- Нужно перейти в директорию
{$PROJECT DIRECTORY}\jni
и открыть файл Application.mk (или создать такой файл, если его в этой директории нет).
- В указанном файле нужно заменить код
APP_ABI := armeabi armeabi-v7a
на
APP_ABI := x86
Материалы, которые получаются после построения
Материалы, получаемые при сборке, размещаются в папке
{$PROJECT DIRECTORY}\
. А именно, библиотеки libmain.so
и libfmodex.so
окажутся в папке {$PROJECT DIRECTORY}\libs\x86
. Сгенерированные объектные файлы попадают в папку {$PROJECT DIRECTORY}\obj
.Известные ошибки и проблемы
Если в ходе построения проекта с использованием NDK появляются сообщения об ошибках, нужно настроить разрешение доступа к файлам. А именно, изменить разрешение на «Полный доступ» («Full Control») для группы «Все» («Everyone»).
Кроме того, обратите внимание на то, что приложение, которое использует рассматриваемые библиотеки, может не запуститься в эмуляторе. Учтите и то, что для его нормальной работы на физическом устройстве нужно скопировать файлы из папок
{$FMOD INSTALLED PATH}\examples\media\*
и {$FMOD INSTALLED PATH}\fmoddesignerapi\examples\media\
в папку fmod
, которая должна быть расположена в корневой директории SD-карты устройства.Fmod Studio API, работа в Android Studio
Fmod, помимо библиотеки Fmod Ex, предлагает продукт Fmod Studio, предназначенный для подготовки звука для компьютерных игр, и соответствующую библиотеку для различных платформ, которая позволяет работать с проектами Fmod Studio. Всё это можно загрузить отсюда.
Для того чтобы быстро получить работающий пример использования Fmod Studio API на Android, вы можете воспользоваться проектом с GitHub Fmod Sample 3D. В частности, в проекте присутствует библиотека, рассчитанная на архитектуру x86. Его можно импортировать в вашу IDE, например — в Android Studio. Если при импорте возникнет ошибка
NDK integration is deprecated…
, для её исправления в корневой папке проекта нужно создать файл gradle.properties
и записать в него строку android.useDeprecatedNdk=true
.Запуск демонстрационного приложения на Asus FonePad 8
Многие примеры использования сторонних библиотек в Android-проектах, которые, в частности, можно обнаружить на GitHub, созданы с использованием IDE Eclipse. Их можно импортировать и в Android Studio, однако, в ходе импорта могут возникнуть ошибки.
Например, если системе не удаётся обнаружить NDK – вероятнее всего, неверно указан путь к нему в настройках проекта. Проверить это можно в файле
local.properties
, в корневой директории проекта. Исправить – записав верный путь в переменную ndk.dir
.Если Eclipse-проект содержит ссылки на внешние файлы, которые в вашей копии импортированного проекта неактуальны, Android Studio может отказаться импортировать проект до исправления таких ссылок. Для успешного импорта проекта нужно найти файлы (например –
project.properties
), содержащие такие ссылки (например, вида «android.library.reference.1=
») и исправить их на те, которые актуальны для вашего окружения.Cocos2d-x
Рассмотрим теперь процесс создания кросс-платформенного Android-приложения с использованием игрового движка Cocos2d-x для целевой платформы x86.
Приложение-пример, которое используется в этом руководстве, является частью материалов, доступных при загрузке Cocos2d-x. Приложение можно найти в папке
\samples\Cpp\
, которая расположена, в нашем случае, в директории cocos2d-x-2.1.1
.Cocos2d-x – это библиотека, написанная на C++ и портированная на множество платформ. Среди них – iOS, Android, Windows, Marmalade, Linux, Bada и Blackberry 10. В качестве скриптовых языков при работе с игровым движком используются Lua и JavaScript. Подробности о движке можно найти в документации к нему.
Прежде чем приступать к работе с Cocos2D-x, вам нужно подготовить всё необходимое – так, как описано в начале этого материала.
Загрузка Cocos2d-x
Загрузите свежую версию Cocos2d-x. Обратите внимание на то, что нам нужна обычная, а не html-5 версия движка.
Установка и настройка Cocos2d-x
- Распакуйте архив, загруженный на предыдущем шаге, на диск. В нашем случае архив извлечён в папку
D:\Cocos2d-x
.
- После распаковки архива, для описываемой версии движка, в целевой папке будут находиться директории
D:\Cocos2d-x\__MACOSX
иD:\Cocos2d-x\cocos2d-x-2.2.1
.
- Настройте переменную среды для Cocos2d-x следующим образом:
COCOS2DX_ROOT = полный путь к папкеcocos2d-x-2.2.1
, в нашем случае это:D:\Cocos2d-x\cocos2d-x-2.2.1.
Прежде чем мы продолжим, обратите внимание на несколько переменных, указывающих на пути к различным папкам. Мы будем пользоваться ими ниже:
{$ADT PATH}
= полный путь к Android ADT, в нашем случае это:D:\android\adt-bundle-windows-x86_64-20131030.
{$ECLIPSE PATH}
= полный путь к Eclipse. В нашем случае, так как Eclipse входит в состав ADT, путь будет выглядеть как:{$ADT PATH}\eclipse
{$COCOS2D-X PATH}
= полный путь к папке cocos2d-x-2.2.1, в нашем случае это:D:\Cocos2d-x\cocos2d-x-2.2.1.
{$WORKSPACE PATH}
= полный путь к папке рабочего пространства Android-проекта Eclipse. У нас это:D:\and_proj_coco
.
Настройка проекта Cocos2d-x в IDE Eclipse
1. Запустите Eclipse, воспользовавшись исполняемым файлом
{$ECLIPSE PATH}\eclipse.exe
.2. Создайте рабочее пространство. Мы создали его по адресу
{$WORKSPACE PATH}
, как показано на рисунке.Рабочее пространство Android-проекта
3. Выполните команду File > Import.
Команда импорта
4. Появится окно, похожее на то, что приведено на рисунке.
Окно импорта
5. Разверните раздел Android, выберите пункт Existing Android Code Into Workspace и нажмите кнопку Next.
6. В следующем окне нажмите на кнопку Browse, как показано ниже.
Поиск корневой директории проекта для импорта
7. Найдите папку {$COCOS2D-X PATH}\samples\Cpp\HelloCpp\proj.android, как показано на рисунке, и нажмите OK.
Выбор корневой директории проекта для импорта
8. Для этого демонстрационного примера, прежде чем нажимать на кнопку Finish, проверьте, чтобы флаг Copy projects into workspace не был установлен.
Флаг Copy projects into workspace должен быть сброшен
9. После импорта в Eclipse могут появиться сообщения об ошибках. Пока на них можно не обращать внимания и переходить к следующим шагам.
Обратите внимание на то, что если в будущем вы решите оставить исходный код проекта в неприкосновенности и будете при этом уверены, что импорт кода проекта в рабочее пространство не повлияет на его исполнение, вышеописанный флаг Copy projects into workspace можно установить.
10. Теперь повторите шаги 3 – 8, с той разницей, что вместо импорта
{$COCOS2D-X PATH}\samples\Cpp\HelloCpp\proj.android
, нужно выполнить импорт {$COCOS2D-X PATH}\cocos2dx\platform\android
как показано ниже. Если хотите, установите флаг Copy project into workspace.Импорт другого проекта
11. Если сообщения об ошибках, которые возникли на шаге 8, не исчезли, выполните следующие шаги для решения проблем.
12. На закладке Package Explorer, слева, щёлкните правой кнопкой мыши libcocos2dx и в появившемся меню выберите пункт Properties.
Команда для вызова окна свойств проекта
13. В появившемся окне выберите, в левой колонке, пункт Android и проверьте, установлен ли флаг Is Library, как показано на рисунке ниже. Если это не так, установите флаг, нажмите Apply и OK.
Настройка параметров проекта
14. Так же, как было описано выше, откройте свойства проекта HelloCpp, добравшись до окна, показанного на рисунке.
Окно свойств проекта HelloCpp
15. Уберите из раздела Library всё, что отмечено красным крестиком и нажмите кнопку Add.
16. Выберите libcocos2dx и нажмите OK.
Выбор проекта libcocos2dx
17. Теперь вы увидите, что в разделе Library появилось название проекта с зелёной галочкой. После этого можно нажать кнопку Apply, и затем – OK.
Завершение настройки проекта HelloCpp
18. На данном этапе Eclipse выполнит перестроение проекта. Если сообщений об ошибках не появилось, пропустите этот шаг. Если нет – удалите проект HelloCpp из панели Package Explorer. При этом обратите внимание на то, чтобы флаг Delete project contents on disk… не был установлен. Если он будет установлен, данное действие нельзя будет отменить. Теперь снова выполните шаги 3 – 8 и 13 – 16.
Удаление проекта из панели Project Explorer
19. Теперь ваш проект должен выглядеть примерно так, как показано на рисунке.
Проект, готовый к дальнейшей работе
Если вы успешно добрались до этого места – примите поздравления! Проект успешно открыт в IDE Eclipse, всё готово к его сборке.
Построение проекта Cocos2d-x в IDE Eclipse
1. На закладке Package Explorer найдите файл HelloCpp > jni > Application.mk
Файл Application.mk
2. Для того чтобы осуществить сборку для платформы x86, добавьте туда следующее:
APP_ABI := x86
Теперь, в главном меню Project, сначала выполните команду Clean…, потом – Build Project.
Очистка и сборка проекта
Открытие и построение проекта Cocos2d-x средствами Cygwin
1. Запустите Cygwin и перейдите к папке демонстрационного проекта HelloCpp, используя следующую команду:
cd /cygdrive/d/Cocos2d-x/cocos2d-x-2.2.1/samples/Cpp/HelloCpp/proj.android
Учитывайте, что путь к папке проекта зависит от
{$COCOS2D-X PATH}.
2. Откройте файл /jni/Application.mk. Он должен содержать следующую строку:
APP_ABI := x86
3. Для построения проекта, находясь в папке /proj.android, выполните следующую команду:
./build_native.sh
Если вы столкнётесь с сообщениями об ошибках, проверьте следующее:
- Убедитесь в том, что загружены все необходимые пакеты для Cygwin.
- Переменная PATH Cygwin содержит пути к Android NDK, SDK, JDK и к папкам COCOS2D-X, как было описано в разделе, посвящённом предварительной подготовке.
После успешного завершения сборки двоичные файлы окажутся в папке
proj.android\obj\local\x86
. В частности, это следующие файлы:proj.android\obj\local\x86\libhellocpp.so
proj.android\obj\local\x86\libcocos2d.a
OpenAL (Open Audio Library)
OpenAL (Open Audio Library) – это кросс-платформенный API для работы со звуком. Данная библиотека разработана для эффективного вывода многоканального объёмного звука. Стиль API и соглашения, принятые в нём, намеренно сделаны похожими на OpenGL. Начиная с версии 1.1., компания Creative закрыла код своей реализации. Однако, OpenAL Soft – это широко используемая альтернатива с открытым кодом. Мы будем пользоваться версией OpenAL Soft, адаптированной для Android.
Для работы с OpenAL нам понадобится та же среда, которой мы пользовались в предыдущих примерах.
Загрузка исправленного кода OpenAL
Для того чтобы работать с OpenAL, нам понадобится исправленный исходный код, который специально адаптирован для Android. Соответствующая версия OpenAL увидела свет благодаря стараниями Мартинса Мозейко (Martins Mozeiko) и Криса Робинсона (Chris Robinson). Спасибо им за это! Для продолжения наших экспериментов загрузите свежую версию кода.
Загрузить всё необходимое можно и другим путём, пользуясь терминалом Cygwin.
- Запустите Cygwin и введите следующую команду:
git clone http://repo.or.cz/r/openal-soft/android.git OpenAL
- После успешного выполнения этой команды, нужный нам репозиторий будет клонирован в локальную папку OpenAL. В нашем случае это папка
/home/user001
или ~.
Обратите внимание на то, что в случае с Windows-версией Cygwin, директорию
/home
можно найти в той папке, куда установлен Cygwin. В нашем случае это – D:\cygwin64
.Настройка OpenAL для платформы x86
Прежде чем приступать к сборке, создадим обычный Android-проект Hello OpenAL. Будем считать, что путь к папке этого проекта –
{$PROJECT_DIR}
, например, он может быть таким: D:\openal_proj\HelloOpenAL
.Для сборки проекта с использованием OpenAL для Android, нужно выполнить следующие шаги.
1. Для сборки OpenAL понадобится файл config.h. Его надо скопировать из этой папки:
{$OPENAL_DIR}/android/jni
в эту:
{$OPENAL_DIR}/include
Здесь
{$OPENAL_DIR}
– это полный путь к папке, в которую на предыдущем этапе были загружены файлы OpenAL. В нашем случае это ~/openal
.2. Теперь, когда файл скопирован, скопируйте данную папку OpenAL в папку проекта
{$PROJECT_DIR}.
. Добавьте в следующих шагах native-интерфейс к проекту.3. Мы пользовались файлом
org_pielot_helloopenal_HelloOpenAL.c
для реализации методов воспроизведения аудио из «родного» интерфейса.4. Добавьте в следующих шагах native-интерфейс к проекту.
5. Нужно создать два make-файла. Это – Android.mk и Application.mk и поместить их в папку
jni
вместе с файлом .c
и его файлом заголовков .h
.Для того чтобы настроить проект для платформы x86, проверьте, чтобы в файле Application.mk содержалось следующее:
APP_OPTIM := release
APP_ABI := x86
Сборка проекта
- Запустите Cygwin и перейдите к папке
{$PROJECT_DIR}:
cd /cygdrive/{$PROJECT_DIR}
Здесь{$PROJECT_DIR}
представляет собой полный путь к папке проекта. В нашем случае команда выглядит так:
cd /cygdrive/d/openal_proj
- Теперь, для того, чтобы включить путь к NDK в переменную среды PATH Cygwin, выполните команду такого вида:
export PATH=.:/cygdrive/{$PATH TO NDK}:$PATH
Например, в нашем случае она выглядит так:
export PATH=.:/cygdrive/d/android/android-ndk-r9b:$PATH
- Выполните команду для сборки проекта:
ndk-build
После её успешного выполнения проект OpenAL будет собран для целевой архитектуры x86.
Файлы, полученные при сборке проекта
Файлы, являющиеся результатами сборки, расположены в папке
{$PROJECT_DIR}
. А именно, сгенерированные библиотеки libopenal.so
и libopenaltest.so
будут находиться в папке {$PROJECT_DIR}\libs\x86
.Объектные файлы – в папке
{$PROJECT_DIR}\obj
.Библиотеки OpenSSL
Рассмотрим сборку библиотек OpenSSL для Android-устройств, построенных на базе архитектуры x86.
Предварительная подготовка
Для дальнейшей работы нам понадобится следующее.
- Главный компьютер, работающий под управлением ОС Windows 7 или более поздней.
- Так как библиотеки OpenSSL написаны на чистом C, для сборки будет достаточно Android NDK, в который встроена поддержка для кросс-компиляции библиотек для заданных платформ (ARM, x86 и других).
Исходный код библиотек OpenSSL для Android можно загрузить из репозиториев eighthave или guardianproject.
Сборка для платформы x86
Выбрать целевую платформу сборки можно так же, как и для любого другого Android-приложения, используя установки Application Binary Interface (ABI). В нашем случае в файле
jni/Application.mk
должно присутствовать следующее:APP_ABI := x86
Итак, после того, как NDK загружен и установлен, исходный код Android OpenSSL так же загружен и размещён в локальной папке (например, в
C:\openssl-android-master
), для сборки библиотек нужно будет сделать следующее.- Откройте окно командной строки (cmd.exe).
- Перейдите в папку, где расположены файлы OpenSSL для Android. Например, такой командой:
Не забудьте указать для сборки целевую платформу x86:
APP_ABI := x86
Выполните команду NDK для запуска сборки:
C:\openssl-android-master > ndk-build
После её успешного завершения будут созданы OpenSSL-библиотеки
libssl
и libcrypto
, расположенные, в нашем случае, здесь:C:\openssl-android-master\libs\x86\libcrypto.so
C:\openssl-android-master\libs\x86\libssl.so
Выводы
Мы рассмотрели вопросы подготовки различных библиотек для использования в приложениях, рассчитанных на Android-устройства, построенные на платформе x86. Это – библиотеки для работы со звуком FMOD и OpenAL, игровой движок Cocos2d-x, криптографическая библиотека OpenSSL. Да, кстати, если вам нужно подготовить для использования в проектах, рассчитанных на архитектуру x86, библиотеку FFMPEG, можете заглянуть сюда.
Освоив приведённый здесь материал, вы не только сможете воспользоваться вышеупомянутыми библиотеками в своих проектах, но и, применяя описанные методики, готовить другие библиотеки так, как вам нужно. Удачного кодинга!