УДК 004.451.9Android
ББК 32.973.26-018.2
P31
Ретабоуил Сильвен
Р31 Android NDK. Разработка приложений под Android на С/С++:
пер. с англ. Киселева А.Н. – М.: ДМК Пресс, 2014. – 496 с.: ил.
ISBN 978-5-97060-079-5
В книге показано, как создавать мобильные приложения для
платформы Android на языке C/C++ с использованием пакета
библиотек Android Native Development Kit (NDK) и объединять
их с программным кодом на языке Java. Вы узнаете как
создать первое низкоуровневое приложение для Android, как
взаимодействовать с программным кодом на Java посредством
механизма Java Native Interfaces, как соединить в своем приложении
вывод графики и звука, обработку устройств ввода
и датчиков, как отображать графику с помощью библиотеки
OpenGL ES и др.
Издание предназначено для разработчиков мобильных
приложений, как начинающих так и более опытных, уже знакомых
с программированием под Android с использованием
Android SDK.
УДК 004.451.9Android
ББК 32.973.26-018.2
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без
письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку
вероятность технических ошибок все равно существует, издательство
не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим издательство не несет ответственности за возможные
ошибки, связанные с использованием книги.
ISBN 978-1-84969-152-9 (анг.)
ISBN 978-5-97060-079-5 (рус.)
Copyright © Packt Publishing
© Оформление, ДМК Пресс, 2014
Стр.5
Содержание
Об авторе ............................................................................. 13
О рецензентах .................................................................... 14
Предисловие ....................................................................... 15
Глава 1
Подготовка окружения ..................................................... 23
Приступая к разработке программ для Android ................... 23
Настройка в Windows .......................................................... 24
Время действовать – подготовка Windows
для разработки на платформе Android ................................ 24
Установка инструментов разработки для Android
в Windows............................................................................ 29
Время действовать – установка Android SDK и NDK
в Windows............................................................................ 30
Настройка в Mac OS X ......................................................... 36
Время действовать – подготовка Mac OS X
для разработки на платформе Android ................................ 36
Установка инструментов разработки для Android
в Mac OS X .......................................................................... 38
Время действовать – установка Android SDK и NDK
в Mac OS X .......................................................................... 38
Настройка в Linux ................................................................ 40
Стр.6
6
Содержание
Время действовать – подготовка Ubuntu Linux
для разработки на платформе Android ................................ 41
Установка инструментов разработки для Android в Linux ..... 46
Время действовать – установка Android SDK и NDK
в Ubuntu .............................................................................. 46
Настройка среды разработки Eclipse .................................. 48
Время действовать – установка Eclipse ............................... 49
Эмулятор платформы Android ............................................. 53
Время действовать – создание виртуального устройства
на платформе Android ......................................................... 53
Вперед, герои! .................................................................... 56
Разработка с действующим устройством на платформе
Android в Windows и Mac OS X .............................................. 58
Время действовать – подключение действующего
устройства на платформе Android в Windows и Mac OS X ..... 58
Разработка с действующим устройством на платформе
Android в Linux ..................................................................... 60
Время действовать – подключение действующего
устройства на платформе Android в Ubuntu ......................... 60
Устранение проблем подключения устройства ................... 64
В заключение ...................................................................... 66
Глава 2
Создание, компиляция и развертывание
проектов ............................................................................... 67
Компиляция и развертывание примеров приложений
из комплекта Android NDK .................................................. 68
Время действовать – компиляция и развертывание
примера hellojni .................................................................. 68
Вперед, герои – компиляция демонстрационного
приложения san angeles OpenGL ......................................... 72
Исследование инструментов Android SDK ........................... 75
Android Debug Bridge ...................................................... 75
Стр.7
Содержание
7
Вперед, герои – запись файла на SD-карту
из командной строки .......................................................... 77
Инструмент настройки проекта ...................................... 78
Вперед, герои – к непрерывной интеграции ....................... 79
Создание первого проекта приложения для Android
с помощью Eclipse .............................................................. 81
Время действовать – создание проекта на Java .................. 81
Введение в Dalvik ........................................................... 85
Взаимодействие Java и C/C++ ............................................ 86
Время действовать – вызов программного кода
на языке C из Java ............................................................... 86
Подробнее о файлах Makefile ......................................... 91
Компиляция низкоуровневого программного кода
из Eclipse ............................................................................ 94
Время действовать – создание гибридного проекта
Java/C/C++ ......................................................................... 94
В заключение ...................................................................... 99
Глава 3
Взаимодействие Java и C/C++ посредством JNI ..... 101
Работа со значениями простых типов языка Java .............. 102
Время действовать – создание низкоуровневого
хранилища ........................................................................ 102
Вперед, герои – получение и возврат значений других
простых типов ................................................................... 114
Ссылка на Java-объекты из низкоуровневого кода ............ 115
Время действовать – сохранение ссылки на объект .......... 115
Локальные и глобальные ссылки JNI ............................. 120
Возбуждение исключений из низкоуровневого кода ......... 122
Время действовать – возбуждение исключений
в приложении Store ........................................................... 122
JNI в C++ ...................................................................... 127
Обработка Java-массивов ................................................ 128
Стр.8
8
Содержание
Время действовать – сохранение ссылки на объект .......... 128
Проверка исключений JNI ............................................ 138
Вперед, герои – обработка массивов других типов ........... 139
В заключение .................................................................... 139
Глава 4
Вызов функций на языке Java
из низкоуровневого программного кода .................... 141
Синхронизация операций в Java и низкоуровневых
потоках выполнения ......................................................... 142
Время действовать – запуск фонового потока
выполнения ...................................................................... 143
Присоединение и отсоединение потоков
выполнения .................................................................. 153
Подробнее о Java и жизненном цикле
низкоуровневого кода .................................................. 155
Обратный вызов Java-методов из низкоуровневого
кода .................................................................................. 156
Время действовать – вызов Java-методов
из низкоуровневого потока выполнения ........................... 157
Еще об обратных вызовах ............................................. 168
Определение методов в механизме JNI........................ 170
Низкоуровневая обработка растровых изображений ........ 171
Время действовать – декодирование видеопотока
от встроенной камеры в низкоуровневом коде ................. 171
В заключение .................................................................... 182
Глава 5
Создание исключительно низкоуровневых
приложений ....................................................................... 184
Создание низкоуровневого визуального компонента ....... 185
Время действовать – создание простейшего
низкоуровневого визуального компонента ....................... 185
Стр.9
Содержание
9
Обработка событий визуального компонента ................... 193
Время действовать – обработка событий в визуальном
компоненте ....................................................................... 194
Еще о модуле связи android_native_app_glue ................ 206
Вперед, герои – сохранение состояния визуального
компонента ....................................................................... 211
Доступ к окну и получение времени из низкоуровневого
кода .................................................................................. 212
Время действовать – отображение простой графики
и реализация таймера ...................................................... 213
Еще о функциях для работы со временем ..................... 222
В заключение .................................................................... 223
Глава 6
Отображение графики средствами OpenGL ES ........ 224
Инициализация OpenGL ES ............................................... 225
Время действовать – инициализация OpenGL ES .............. 226
Чтение текстур в формате PNG с помощью диспетчера
ресурсов ........................................................................... 235
Время действовать – загрузка текстуры в OpenGL ES ....... 236
Рисование спрайта ........................................................... 252
Время действовать – рисование спрайта корабля ............ 252
Отображение мозаичных изображений с помощью
объектов вершинных буферов .......................................... 264
Время действовать – рисование мозаичного фона ........... 265
В заключение .................................................................... 283
Глава 7
Проигрывание звука средствами OpenSL ES ............ 284
Инициализация OpenSL ES ............................................... 286
Время действовать – создание механизма на основе
OpenSL ES и вывод звука .................................................. 286
Стр.10
10
Содержание
Еще о философии OpenSL ES ....................................... 293
Воспроизведение музыкальных файлов ........................... 295
Время действовать – воспроизведение музыки в фоне .... 295
Воспроизведение звуков .................................................. 302
Время действовать – создание и воспроизведение
очереди звуковых буферов ............................................... 304
Обработка событий ...................................................... 314
Запись звука ..................................................................... 315
Вперед, герои – запись и воспроизведение звука ............. 316
В заключение .................................................................... 320
Глава 8
Обслуживание устройств ввода и датчиков .............. 322
Взаимодействие с платформой Android ............................ 323
Время действовать – обработка событий
прикосновения ................................................................. 325
Обработка событий от клавиатуры, клавиш
направления (D-Pad) и трекбола ....................................... 338
Время действовать – низкоуровневая обработка
клавиатуры, клавиш направлений (D-Pad) и трекбола ....... 339
Вперед, герои – отображение виртуальной клавиатуры .... 348
Проверка датчиков ........................................................... 350
Время действовать – превращение устройства
в джойстик ........................................................................ 351
Вперед, герои – обработка поворота экрана ..................... 364
В заключение .................................................................... 366
Глава 9
Перенос существующих библиотек
на платформу Android ..................................................... 367
Разработка с применением стандартной библиотеки
шаблонов.......................................................................... 368
Стр.11
Содержание
11
Время действовать – встраивание библиотеки STLport
в DroidBlaster .................................................................... 369
Статическое и динамическое связывания .................... 379
Компиляция Boost на платформе Android .......................... 381
Время действовать – встраивание библиотеки Boost
в DroidBlaster .................................................................... 382
Вперед, герои – реализация многопоточной модели
выполнения с помощью Boost ........................................... 391
Перенос сторонних библиотек на платформу Android ....... 393
Время действовать – компиляция Box2D и Irrlicht в NDK ... 394
Уровни оптимизации в GCC .......................................... 403
Мастерство владения файлами Makefile ........................... 404
Переменные в файлах Makefile ..................................... 404
Инструкции в файлах Makefile ...................................... 406
Вперед, герои – мастерство владения файлами
Makefile ............................................................................ 408
В заключение .................................................................... 410
Глава 10
Вперед, к профессиональным играм .......................... 411
Моделирование механических взаимодействий
физических тел с помощью библиотеки Box2D ................ 411
Время действовать – моделирование механических
взаимодействий с помощью Box2D .................................. 412
Подробнее об определении столкновений ................... 426
Режимы столкновений ................................................. 427
Фильтрация столкновений ........................................... 428
Дополнительные ресурсы, посвященные Box2D ........... 430
Запуск движка трехмерной графики в Android ................... 430
Время действовать – отображение трехмерной графики
с помощью Irrlicht.............................................................. 431
Подробнее об управлении сценой в Irrlicht ................... 443
В заключение .................................................................... 444
Стр.12
12
Содержание
Глава 11
Отладка и поиск ошибок ................................................. 446
Отладка с помощью GDB................................................... 446
Время действовать – отладка DroidBlaster ........................ 447
Анализ информации трассировки стека ............................ 456
Время действовать – анализ аварийных дампов ............... 456
Подробнее об аварийных дампах ................................. 461
Анализ производительности ............................................. 462
Время действовать – запуск профилировщика GProf ........ 464
Как он действует .......................................................... 469
Наборы команд ARM, Thumb и NEON ............................ 470
В заключение .................................................................... 472
Послесловие ..................................................................... 473
Предметный указатель ................................................... 478
Стр.13