Android NDK. Разработка приложений под Android на С/С++
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Ретабоуил Сильвен
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 497
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-542-8
Артикул: 603166.03.99
Доступ онлайн
В корзину
В книге показано, как создавать мобильные приложения для платформы Android на языке C/C++ с использованием пакета библиотек Android Native Development Kit (NDK) и объединять их с программным кодом на языке Java. Вы узнаете как создать первое низкоуровневое приложение для Android, как взаимодействовать с программным кодом на Java посредством механизма Java Native Interfaces, как соединить в своем приложении вывод графики и звука, обработку устройств ввода и датчиков, как отображать графику с помощью библиотеки OpenGL ES и др.
Издание предназначено для разработчиков мобильных приложений, как начинающих так и более опытных, уже знакомых с программированием под Android с использованием Android SDK.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование на C и C++
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
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 и вам необходимо увеличить производительность своих приложений? Вы пишете
Доступ онлайн
В корзину