Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Android NDK. Разработка приложений под Android на С/С++

Покупка
Артикул: 603166.03.99
Доступ онлайн
439 ₽
В корзину
В книге показано, как создавать мобильные приложения для платформы Android на языке C/C++ с использованием пакета библиотек Android Native Development Kit (NDK) и объединять их с программным кодом на языке Java. Вы узнаете как создать первое низкоуровневое приложение для Android, как взаимодействовать с программным кодом на Java посредством механизма Java Native Interfaces, как соединить в своем приложении вывод графики и звука, обработку устройств ввода и датчиков, как отображать графику с помощью библиотеки OpenGL ES и др. Издание предназначено для разработчиков мобильных приложений, как начинающих так и более опытных, уже знакомых с программированием под Android с использованием Android SDK.
Ретабоуил, С. Android NDK. Разработка приложений под Android на С/С++ : практическое руководство / С. Ретабоуил ; пер. с англ. А. Н. Киселёва. - 2-е изд. - Москва : ДМК Пресс, 2023. - 497 с. - ISBN 978-5-89818-542-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/2107219 (дата обращения: 07.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Android NDK

Разработка приложений под Android на С/С++

Сильвен Ретабоуил
Android NDK

Beginners's Guide

Sylvain Ratabouil

Discover the native side of Android and inject the power  
of C/C++ in your applications
Android NDK

Разработка приложений под Android на С/С++

Москва, 2023

Сильвен Ретабоуил

Откройте доступ к внутренней природе Android и добавьте 
мощь C/C++ в свои приложения

2-е издание, электронное
УДК 004.451.9Android
ББК 32.973.26-018.2
P31

P31
Ретабоуил, Сильвен.
Android NDK. Разработка приложений под Android на С/С++ / С. Рета-
боуил ; пер. с англ. А. Н. Киселёва. — 2-е изд., эл. — 1 файл pdf : 497 с. — Москва : 
ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe 
Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-542-8

В книге показано, как создавать мобильные приложения для платформы 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

Электронное издание на основе печатного издания: Android NDK. Разработка приложений под Android на 
С/С++ / С. Ретабоуил ; пер. с англ. А. Н. Киселёва. — Москва : ДМК Пресс, 2014. — 496 c. — ISBN 978-5-
97060-079-5. — Текст : непосредственный.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было 
форме и какими бы то ни было средствами без  письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических 
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность 
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные 
с использованием книги.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами 
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.


ISBN 978-5-89818-542-8
© Packt Publishing
© Оформление, ДМК Пресс, 2014
Содержание

Об авторе ............................................................................. 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
Содержание

Время действовать – подготовка 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
Содержание

Вперед, герои – запись файла на 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
Содержание

Время действовать – сохранение ссылки на объект .......... 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
Содержание

Обработка событий визуального компонента  ................... 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
Содержание

Еще о философии 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
Содержание

Время действовать – встраивание библиотеки 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
Содержание

Глава 11
Отладка и поиск ошибок ................................................. 446

Отладка с помощью GDB................................................... 446

Время действовать – отладка DroidBlaster ........................ 447

Анализ информации трассировки стека ............................ 456

Время действовать – анализ аварийных дампов ............... 456
Подробнее об аварийных дампах ................................. 461

Анализ производительности ............................................. 462

Время действовать – запуск профилировщика GProf ........ 464
Как он действует .......................................................... 469
Наборы команд ARM, Thumb и NEON ............................ 470

В заключение .................................................................... 472

Послесловие ..................................................................... 473

Предметный указатель ................................................... 478
Об авторе

Сильвен Ретабоуил (Sylvain Ratabouil) – сертифицированный эксперт 
в области информационных технологий с опытом работы на 
языках C++ и Java. Одно время он работал в космической промышленности 
и привлекался к участию в авиационных проектах, разрабатываемых 
компанией Valtech Technologies, где теперь принимает 
участие в цифровой революции.
Сильвен получил степень магистра в области информационных 
технологий в университете имени Поля Сабатье (Paul Sabatier) в 
городе Тулузе (Франция) и степень магистра информатики в Ливерпульском 
университете.
Будучи человеком с техническим складом ума, он влюблен в мобильные 
технологии и не представляет себе жизни без своего смартфона 
на платформе Android.
Я хотел бы выразить свою благодарность Стивену Вилдингу 
(Ste ven Wilding) за предложение написать эту книгу; Снехе Хар-
куту (Sneha Harkut) и Йовиту Пинте (Jovita Pinto), ждавшим меня 
с большим терпением; Решму Сандаресану (Reshma Sundaresan) и 
Дайану Хайэмизу (Dayan Hyames), направлявшим работу в правильное 
русло; Саре Каллингтон (Sarah Cullington) за помощь в завершении 
книги; доктору Франку Грютцмахеру (Dr. Frank Grützmacher), 
Марку Гаргенте (Marko Gargenta) и Роберту Митчеллу (Robert Mit-
chell) за их любезные замечания.
О рецензентах

Доктор Франк Грютцмахер (Dr. Frank Grützmacher) работал в нескольких 
крупных немецких фирмах, где занимался большими распределенными 
системами. В прошлом был одним из первых пользователей 
различных реализаций технологии Corba.
Имеет степень кандидата электротехнических наук со специализацией 
по распределенным гетерогенным системам. В 2010 году был 
вовлечен в проект по адаптации отдельных частей платформы An-
droid под нужды производителя. Благодаря этому он приобрел свои 
знания об Android NDK и о низкоуровневых процессах, составляющих 
основу этой платформы.
Он уже занимался рецензированием другой книги об Android 3.0.

Роббер Митчелл (Robert Mitchell) – выпускник Массачуссетско-
го технологического института (MIT) с более чем 40-летним опытом 
работы в области информационных технологий, а ныне пенсионер. 
Занимался разработкой программного обеспечения для всех крупных 
производителей компьютеров: IBM, Amdahl, Fujitsu, National 
Semiconductor и Storage Technology. Работал в компаниях, занимающихся  
разработкой программного обеспечения, включая Veritas и 
Symantec. Самыми недавними языками программирования, которые 
он изучил, стали Ruby и Java, плюс к этому он имеет огромный опыт 
программирования на C++.
Предисловие

Недолгая история развития вычислительной техники отмечена несколькими 
важными событиями, которые навсегда изменили приемы 
ее использования. Вслед за первыми большими ЭВМ появились 
демократичные персональные компьютеры, а затем последовало 
объединение их в сети. Следующим революционным шагом стала 
мобильность. В ней, подобно простому супу, смешаны все ингредиенты: 
вездесущая сеть, новые социальные, профессиональные и 
индустриальные области применения, мощные технологии. Новый 
период внедрения инноваций протекает непосредственно на наших 
глазах. Этого можно бояться или радоваться этому, но будущее уже 
наступило, и это навсегда!

Перспективы мобильных устройств

Современные мобильные устройства являются продуктом всего 
нескольких лет эволюции от первых переносимых телефонов 
до новых, компактных и высокотехнологичных монстров в наших 
карманах. Масштаб времени развития технологий определенно не 
совпадает с масштабом времени, в котором живет человек.
Всего несколько лет назад, находясь на волне успеха своих музыкальных 
устройств, компания Apple и ее основатель Стив Джобс 
(Steve Jobs) вовремя совместили правильное аппаратное решение с 
правильным программным обеспечением и в результате не только 
удовлетворили наши потребности, но и породили новые. Сейчас мы 
столкнулись с новой экосистемой, в которой устанавливается баланс 
между iOS, Windows Mobile, Blackberry, WebOS и, что особенно 
важно, Android! Аппетит завоевания новых рынков не позволил 
расслабиться компании Google. На плечах этого интернет-гиганта 
Android вышел на сцену в роли более привлекательной альтернативы 
хорошо известным устройствам iPhone и iPad. И очень скоро 
захватил лидирующие позиции.
В этом современном Эльдорадо еще предстоит придумать новые 
области использования, или, говоря техническим языком, приложе-
Предисловие

ния (или визуального компонента1), если вы уже являетесь адептом 
Android). Таковы перспективы мобильных устройств. И нематериальный 
мир Android является отличным местом для их воплощения. 
Android является открытой (в большей ее части) операционной системой, 
в настоящее время поддерживаемой большой группой производителей 
мобильных устройств.
Переносимость между аппаратными платформами и приспособленность 
к ограниченности ресурсов мобильных устройств являются 
основными проблемами мобильности с технической точки 
зрения. Платформе Android приходится иметь дело с разными разрешениями 
экрана, с различными по мощности и по возможностям 
CPU и GPU, с ограниченным объемом памяти и другими проблемами, 
которые не являются чем-то непреодолимым для этой системы 
на основе ядра Linux (то есть для Android), но которые могут быть 
источником неудобств.
Чтобы облегчить переносимость, инженеры Google подготовили 
виртуальную машину с законченной инфраструктурой (Android 
SDK), под управлением которой выполняются программы, написанные 
на одном из самых распространенных языков программирования – 
Java. Язык Java, дополненный новыми возможностями 
платформы Android, обладает огромным потенциалом. Но, во-
первых, поддержка Java является отличительной чертой Android. 
Компания Apple, например, пишет свои продукты на Objective C, 
которые могут объединяться с программами на языках C и C++. 
И во-вторых, виртуальная машина Java не всегда дает возможность 
полностью использовать все вычислительные мощности мобильных 
устройств, даже когда включена поддержка динамической компиляции. 
Мобильные устройства обладают ограниченными ресурсами, 
поэтому приходится проявлять особое внимание к их использованию, 
чтобы обеспечить более высокую производительность программ. 
В таких ситуациях нам на помощь приходит Android Native 
Development Kit.

О чем рассказывается в этой книге

Глава 1 «Подготовка окружения» охватывает инструменты, необходимые 
для разработки приложений с использованием Android 
NDK. В этой главе также рассматриваются порядок настройки сре-

1 В английском языке звучит как «activity».
ды разработки, подключение ее к устройству на платформе Android 
и настройка эмулятора ОС Android.
Глава 2 «Создание, компиляция и развертывание проектов» описывает 
порядок сборки, упаковки и развертывания проектов на основе 
NDK. Здесь мы создадим наш первый гибридный проект Java/C для 
платформы Android с применением NDK и Eclipse.
Глава 3 «Взаимодействие Java и C/C++ посредством JNI» рассказывает, 
как виртуальная машина Java интегрирует программный 
код на C/C++ и взаимодействует с ним посредством механизма Java 
Native Interface.
Глава 4 «Вызов функций на языке Java из низкоуровневого программного 
кода» описывает возможность вызова функций на языке 
Java из программного кода на языке C для обеспечения двунаправ-
ленного взаимодействия и обработки графических изображений на 
низком уровне.
Глава 5 «Создание исключительно низкоуровневых приложений» 
описывает жизненный цикл приложений на основе Android NDK. 
В этой главе мы напишем исключительно низкоуровневое приложение 
без использования Java.
Глава 6 «Отображение графики средствами OpenGL ES» рассказывает, 
как обрабатывать двух- и трехмерную графику с максимально 
возможной скоростью средствами OpenGL ES. Здесь мы научимся 
инициализировать дисплей, загружать текстуры, рисовать спрайты, 
а также выделять вершинные и индексные буферы для отображения 
мозаичных изображений.
Глава 7 «Проигрывание звука средствами OpenSL ES» покажет, как 
с помощью OpenSL ES, уникального механизма, доступного только 
при использовании Android NDK, добавить музыкальное сопровождение 
в низкоуровневые приложения. Здесь мы также научимся записывать 
звук и воспроизводить запись через встроенные динамики.
Глава 8 «Обслуживание устройств ввода и датчиков» рассматривает 
особенности взаимодействия с устройством на платформе And-
roid посредством мультисенсорного экрана. Здесь будет показано, 
как обрабатывать события клавиатуры и воспринимать окружающий 
мир посредством встроенных датчиков, чтобы иметь возможность 
превращать мобильное устройство в игровой механизм управления.
Глава 9 «Перенос существующих библиотек на платформу And ro-
id» покажет, как скомпилировать необходимые библиотеки C/C++, 
STL и Boost. Здесь мы также увидим, как задействовать механизм 
исключений и средства доступа к информации о типе во время вы-

О чем рассказывается в этой книге
Предисловие

полнения (RunTime Type Information). Кроме того, мы узнаем, как 
перенести на платформу Android свои собственные или сторонние 
библиотеки, такие как графический движок Irrlicht 3D и физический 
движок Box2D.
Глава 10 «Вперед, к профессиональным играм» демонстрирует пример 
создания на основе Irrlicht и Box2D действующей игры с трех-
мерной графикой, управляемой посредством сенсорного экрана и 
встроенных датчиков.
Глава 11 «Отладка и поиск ошибок» описывает приемы всестороннего 
анализа выполняющихся приложений с помощью отладчика, 
входящего в состав NDK. Кроме того, здесь мы узнаем, как анализировать 
аварийные дампы памяти и производить профилирование 
производительности своих приложений.

Что потребуется для работы с книгой

Персональный компьютер с ОС Windows, Linux или Mac OC 
в версии для процессоров Intel. В качестве испытательного полигона 
весьма желательно было бы иметь устройство на платформе An-
droid. В состав Android NDK входит эмулятор, способный удовлетворить 
большинство потребностей страждущих разработчиков, но 
отображение двух- и трехмерной графики в нем все еще сопряжено 
с некоторыми ограничениями и выполняется довольно медленно.
Я полагаю, вы уже знакомы с языками программирования C и 
C++, указателями, приемами объектно-ориентированного программирования 
и другими современными особенностями языка. Я также 
думаю, что вы имеете некоторое представление о платформе An-
droid и знаете, как создавать приложения для Android на языке Java. 
Эти знания не являются обязательными, но их наличие желательно. 
Я также надеюсь, что вас не пугают терминалы с командной строкой. 
Кроме того, на протяжении всей книги будет использоваться среда 
разработки Eclipse в версии Helios (3.6).
Наконец, соберите весь свой энтузиазм, потому что все эти маленькие 
замечательные устройства становятся по-настоящему удивительными, 
когда демонстрируют весь свой потенциал и отзывчивость.

Кому адресована эта книга

Вы пишете программы для Android на языке Java и вам необходимо 
увеличить производительность своих приложений? Вы пишете 
Доступ онлайн
439 ₽
В корзину