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

Android NDK. Руководство для начинающих

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

Android NDK

Руководство для начинающих
Android NDK

Beginners's Guide

Second Edition

Sylvain Ratabouil

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

BIRMINGHAM - MUMBAI
Android NDK

Руководство для начинающих 

3-е издание, электронное

Москва, 2023

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

Откройте доступ к внутренней природе Android 
и добавьте мощь C/C++ в свои приложения
УДК 004.451.9Android
ББК 32.973.26-018.2
Р31

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

Android NDK. Руководство для начинающих / С. Ретабоуил ; пер. с англ. 
А. Н. Киселёва. — 3-е изд., эл. — 1 файл pdf : 519 с. — Москва : ДМК Пресс, 
2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 
4.5 ; экран 10". — Текст : электронный.

ISBN 978-5-89818-629-6

В книге показано, как создавать мобильные приложения для платформы 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. Руководство для начинающих / 
С. Ретабоуил ; пер. с англ. А. Н. Киселёва. — 2-е изд. — Москва : ДМК Пресс, 2016. — 
518 с. — ISBN 978-5-97060-394-9. — Текст : непосредственный.

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

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


ISBN 978-5-89818-629-6
© 2015 Packt Publishing
© Оформление, ДМК Пресс, 2016
Содержание

Об авторе ........................................................ 10
О рецензентах.................................................. 11
Предисловие ................................................... 13

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

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

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

Разделы ........................................................................................ 16

Соглашения................................................................................... 16

Отзывы и пожелания ..................................................................... 17

Загрузка исходного кода примеров ............................................... 18

Список опечаток............................................................................ 18

Нарушение авторских прав ........................................................... 18

Глава 1.  
Подготовка окружения ...................................... 19

Приступая к разработке программ для Android .............................. 19

Настройка Windows ....................................................................... 20

Установка инструментов разработки для Android в Windows .......... 26

Настройка Mac OS X ...................................................................... 31

Установка инструментов разработки для Android в Mac OS X ......... 34

Настройка Linux ............................................................................. 40

Установка инструментов разработки для Android в Linux ................ 42

Установка среды разработки Eclipse ............................................. 47

Эмулятор платформы Android........................................................ 52

Разработка с действующим устройством на платформе Android ... 56

Дополнительно о службе ADB ........................................................ 60

В заключение ................................................................................ 62
Содержание

Глава 2.  
Создание низкоуровневого проекта для Android .... 64

Компиляция и развертывание примеров приложений 
из Android NDK .............................................................................. 65

Создание файлов проекта с помощью менеджера Android ............ 68

Компиляция низкоуровневого кода с помощью NDK-Build ............. 71

Сборка и упаковка приложений с помощью Ant ............................. 71

Развертывание пакета приложения с помощью Ant ....................... 72

Запуск приложения с помощью командной оболочки ADB ............. 73

Дополнительно об инструментах для Android ................................ 75
Создание первого низкоуровневого проекта для Android ...................... 75

Введение в Dalvik и ART ................................................................. 80

Взаимодействие Java и C/C++ ....................................................... 81

Отладка низкоуровневых приложений для Android......................... 85

Определение настроек NDK для приложения ................................ 88

Повседневное использование NDK-GDB ....................................... 90

Анализ аварийных дампов ............................................................. 91

Настройка проекта Gradle для компиляции низкоуровневого  
кода .............................................................................................. 96

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

Глава 3.  
Взаимодействие Java и C/C++ посредством JNI ... 104

Инициализация библиотеки JNI................................................... 105

Преобразование Java-строк в низкоуровневые строки ................ 114
Кодирование строк в низкоуровневом коде ........................................ 121
Поддержка строк в JNI API ................................................................... 122

Передача элементарных типов Java в низкоуровневый код ......... 124

Ссылки на Java-объекты из низкоуровневого кода ...................... 128
Локальные ссылки .............................................................................. 133
Глобальные ссылки ............................................................................. 135
Слабые ссылки ................................................................................... 135

Обработка Java-массивов ........................................................... 137
Элементарные массивы ...................................................................... 148
Массивы объектов .............................................................................. 151

Возбуждение и проверка Java-исключений ................................. 152
Выполнение кода при наличии исключения ......................................... 156
Содержание

API обработки исключений .................................................................. 157

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

Глава 4.  
Вызов функций на языке Java из низкоуровневого 
кода ............................................................. 160

Обратный вызов Java-методов из низкоуровневого кода ............ 161

Дополнительно о JNI Reflection API .............................................. 168
Отладка JNI ......................................................................................... 170

Синхронизация Java с низкоуровневыми потоками выполнения ....171
Синхронизация программного кода на Java и C/C++ с помощью 
мониторов JNI ..................................................................................... 183
Присоединение и отсоединение потоков выполнения......................... 184

Низкоуровневая обработка растровых изображений ................... 185

Регистрация низкоуровневых методов вручную .......................... 200

JNI в C и C++ ............................................................................... 201

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

Глава 5.  
Создание исключительно низкоуровневых 
приложений ................................................... 203

Создание низкоуровневого визуального компонента .................. 204
Подробнее о низкоуровневом связующем модуле .............................. 211

Обработка событий визуального компонента .............................. 214

Доступ к окну из низкоуровневого кода ....................................... 225

Измерение времени в низкоуровневом коде ............................... 236

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

Глава 6.  
Отображение графики средствами OpenGL ES ..... 248

Инициализация OpenGL ES ......................................................... 249

Конвейер OpenGL ........................................................................ 256

Чтение текстур с помощью диспетчера ресурсов ........................ 258
Дополнительно об Asset Manager API .................................................. 262
Подробнее о текстурах ....................................................................... 278

Рисование двухмерных спрайтов ................................................ 280
Массивы вершин и буферные объекты с вершинами .......................... 301
Содержание

Эффект частиц ............................................................................ 303
Программирование шейдеров на языке GLSL ..................................... 314

Адаптация графики для разных разрешений ............................... 316

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

Глава 7.  
Проигрывание звука средствами OpenSL ES ....... 325

Инициализация OpenSL ES .......................................................... 327
Еще о философии OpenSL ES .............................................................. 333

Воспроизведение музыкальных файлов ...................................... 334

Воспроизведение звуков............................................................. 342
Обработка событий в очереди звуков ................................................. 355
Важность низкой задержки в Android .................................................. 356

Запись звука ............................................................................... 358

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

Глава 8.  
Устройства ввода и датчики ............................. 363

Обработка событий касания ........................................................ 364

Обработка событий от клавиатуры, клавиш направления  
(D-Pad) и трекбола ...................................................................... 378

Проверка датчиков ...................................................................... 385
Дополнительно о датчиках .................................................................. 400

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

Глава 9.  
Перенос существующих библиотек на платформу 
Android ......................................................... 402

Разработка с применением стандартной библиотеки шаблонов . 403

Перенос Box2D на платформу Android ......................................... 420
Мир Box2D .......................................................................................... 441
Подробнее об определении столкновений .......................................... 442
Режимы столкновений и фильтрация .................................................. 444
Дополнительные ресурсы, посвященные Box2D ................................. 446

Компиляция Boost на платформе Android .................................... 447

Мастерство владения файлами Makefile ...................................... 459
Переменные в файлах Makefile ........................................................... 459
Инструкции в файлах сборки ............................................................... 463
Содержание

Архитектуры процессоров (ABI) ................................................... 467
Дополнительные наборы инструкций (NEON, VFP, SSE, MSA) .............. 468

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

Глава 10.  
Интенсивные вычисления на RenderScript .......... 472

Что такое RenderScript? ............................................................... 473
Выполнение встроенной функции ....................................................... 474

Создание собственного ядра ...................................................... 486

Объединение сценариев ............................................................. 495

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

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

Что мы узнали ............................................................................. 505

Куда двигаться дальше ................................................................ 506

Где искать помощь....................................................................... 507

Это лишь начало.......................................................................... 508

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

Сильвен Ретабоуил (Sylvain Ratabouil) – консультант в области 
информационных технологий с опытом программирования на C++ 
и Java в Android. Участвовал в разработке цифровых и мобильных 
приложений для больших компаний, а также для космической и 
авиационной промышленности. Будучи человеком с техническим 
складом ума, влюблен в мобильные технологии и не представляет 
себе жизни без своего смартфона на платформе Android.
О рецензентах

Гай Коул (Guy Cole) – опытный ветеран Кремниевой Долины, с богатым 
опытом работы во многих компаниях, больших и известных, 
таких как Facebook, Cisco, Motorola, Cray Research, Hewlett-Packard, 
Wells Fargo Bank, Barclays Global Investments, DHL Express, и небольших 
и менее известных. Связаться с ним можно в LinkedIn.

Кшиштоф Фонал (Krzysztof Fonał) обожает все, что связано с 
компьютерами. Влюбился в компьютеры, когда ему было еще одиннадцать 
лет. Абсолютно уверен, что выбор технологии не имеет значения 
для решения задач – все зависит от мастерства и желания 
учиться. В настоящее время работает в компании Trapeze Group, 
которая входит в число лидеров, предлагающих свои ИТ-решения. 
Планирует заняться книгами, посвященными проблемам машинного 
обучения а также Corona SDK.

Сергей Косаревский (Sergey Kosarevsky) – программист с богатым 
опытом программирования на C++ и 3-мерной графики. 
Работал в компаниях мобильной индустрии и привлекался к работе 
над проектами для мобильных устройств в SPB Software, Yandex и 
Layar. Имеет 12-летний опыт разработки программного обеспечения 
и более чем 6-летний опыт использования Android NDK. Получил 
степень кандидата технических наук в Санкт-Петербургском институте 
машиностроения, Россия. Соавтор книги «Android NDK Game 
Development Cookbook». В свое свободное время занимается поддержкой 
и разработкой открытого, многоплатформенного игрового 
движка Linderdaum Engine (http://www.linderdaum.com) и открытого, 
многоплатформенного файлового менеджера WCM Commander 
(http://wcm.linderdaum.com).

Раймон Рафолс (Raimon Ràfols) занимается разработкой для 
мобильных устройств с 2004 года. Имеет опыт разработки с применением 
нескольких технологий, специализируется на создании 
пользовательских интерфейсов, системах сборки и клиент-серверных 
взаимодействиях. В настоящее время работает директором под-
О рецензентах

разделения разработки программного обеспечения для мобильных 
устройств в Imagination Technologies, недалеко от Лондона. В свободное 
время любит заниматься программированием, фотографией 
и участвовать в мобильных конференциях, где отдает предпочтение 
вопросам оптимизации производительности Android и создания нестандартных 
пользовательских интерфейсов.

Хочу выразить благодарность моей нежно любимой подруге 
Лайе (Laia) за поддержку и понимание.
Предисловие

Android NDK позволяет внедрять высокопроизводительный и переносимый 
код в мобильные приложения, и на все 100% использовать 
вычислительные мощности мобильных устройств. Android NDK позволит 
вам писать быстрый код для вычислительных задач и переносить 
код, написанный для Android, на другие платформы. Кроме 
того, если у вас есть приложение на языке C, с помощью NDK вы 
сможете существенно ускорить процесс разработки проекта. Это одна 
из самых эффективных операционных систем для мультимедийных 
и игровых приложений.
Данное руководство для начинающих покажет вам, как писать 
приложения на C/C++ и интегрировать их с Java. С помощью этого 
практического пошагового руководства, постепенно наращивая навыки 
на учебных примерах, советах и рекомендациях, вы научитесь 
встраивать код на C/C++ в приложения на Java и даже писать автономные 
приложения.
Книга начинается с изучения приемов доступа к низкоуровневому 
API и переноса библиотек, используемых в некоторых 
наиболее успешных Android-приложениях. Затем вы приступите 
к созданию действующего проекта приложения, использующего 
низкоуровневый API и существующие сторонние библиотеки. По 
мере продвижения вперед, вы получите полное понимание особенностей 
отображения графики и проигрывания звука с применением 
библиотек OpenGL ES и OpenSL ES, превратившихся в новый 
стандарт в мобильном мире. Затем вы узнаете, как получить доступ 
к клавиатуре и другим устройствам ввода, как читать показания 
акселерометра или датчиков ориентации. В заключение вы погрузитесь 
в изучение более сложных тем, таких как программирование 
на RenderScript.
К концу книги вы достаточно хорошо познакомитесь с ключевыми 
понятиями, чтобы начать использовать мощь и переносимость 
низкоуровневого кода.
Предисловие

О чем рассказывается в этой 
книге
Глава 1, «Подготовка окружения», охватывает установку всех необходимых 
инструментов. В этой главе также рассматривается порядок 
установки пакета Android Studio, включающего среду разработки 
Android Studio IDE и библиотеку Android SDK.
Глава 2, «Создание низкоуровневого проекта для Android», описывает 
порядок сборки, упаковки и развертывания проектов для 
Android с помощью инструментов командной строки. Здесь мы создадим 
наш первый для платформы Android с применением Android 
Studio и Eclipse.
Глава 3, «Взаимодействие Java и C/C++ посредством JNI», рассказывает, 
как виртуальная машина Java взаимодействует с программным 
кодом на C/C++. Здесь мы научимся работать со ссылками на 
Java-объекты в низкоуровневом коде с помощью механизма глобальных 
ссылок, и познакомимся с отличительными чертами локальных 
ссылок. В заключение мы научимся возбуждать и перехватывать исключения 
Java в низкоуровневом коде.
Глава 4, «Вызов функций на языке Java из низкоуровневого кода», 
описывает возможность вызова функций на языке Java из низкоуровневого 
кода на языке C с применением JNI Reflection API. Здесь 
мы также научимся обрабатывать графические изображения с помощью 
JNI и вручную декодировать видео.
Глава 5, «Создание исключительно низкоуровневых приложений», 
описывает создание компонента NativeActivity, который в ответ на 
события запускает или останавливает низкоуровневый код. Здесь 
мы также научимся обращаться к экрану для отображения простой 
графики. В заключение будет показано, как измерять время с использованием 
тактового генератора, чтобы иметь возможность адаптировать 
приложение к скоростным характеристикам устройства.
Глава 6, «Отображение графики средствами OpenGL ES», рассказывает, 
как инициализировать контекст OpenGL ES и как связать 
его с окном Android. Затем мы посмотрим, как превратить libpng 
и с его помощью загружать текстуры из ресурсов в формате PNG.
Глава 7, «Проигрывание звука средствами OpenSL ES», рассказывает, 
как инициализировать OpenSL ES в Android. Затем мы 
научимся проигрывать музыку в фоновом режиме из звукового 
файла и из записи, хранящейся в памяти. Здесь мы также научим-
Кому адресована эта книга

ся записывать звук и воспроизводить запись в неблокирующем 
режиме.
Глава 8, «Устройства ввода и датчики», рассматривает особенности 
взаимодействия с устройством на платформе Android из низкоуровневого 
кода. Здесь вы узнаете, как связать очередь событий 
ввода с циклом обработки событий Native App Glue.
Глава 9, «Перенос существующих библиотек на платформу 
Android», покажет, как активировать поддержку STL с применением 
простых флагов в NDK. Здесь мы превратим библиотеку Box2D в 
модуль NDK, пригодный для многократного использования в разных 
проектах для Android.
Глава 10, «Интенсивные вычисления на RenderScript», знакомит с 
языком RenderScript, передовой  технологией организации параллельных 
вычислений. Здесь мы также увидим, как пользоваться 
предопределенными функциями, встроенными в RenderScript, подавляющее 
большинство которых в настоящее время предназначено 
для обработки изображений.

Что потребуется для работы 
с книгой
Для опробования примеров в книге понадобится следующее программное 
обеспечение:

 
‰ Операционная система: Windows, Linux или Mac OS X.
 
‰ JDK: Java SE Development Kit 7 или 8.
 
‰ Cygwin: только для Windows.

Кому адресована эта книга
Вы пишете программы для Android на языке Java и вам необходимо 
увеличить производительность своих приложений? Вы пишете 
программы на C/C++ и не хотите утруждать себя изучением всех 
фишек языка Java и его неконтролируемого сборщика мусора? Вы 
желаете писать быстрые мультимедийные и игровые приложения? 
Если хотя бы на один из этих вопросов вы ответите «да» – эта книга 
для вас. Имея лишь общие представления о разработке программ на 
языке C/C++, вы сможете с головой погрузиться в создание низкоуровневых 
приложений для Android.
Доступ онлайн
699 ₽
В корзину