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

Android NDK

Покупка
Артикул: 712442.02.99
Доступ онлайн
524 ₽
В корзину
В книге показано, как создавать мобильные приложения для платформы Android на языке C/C++ с использованием пакета библиотек Android Native Development Kit (NDK) и объединять их с программным кодом на языке Java. Вы узнаете как создать первое низкоуровневое приложение для Android, как взаимодействовать с программным кодом на Java посредством механизма Java Native Interfaces, как соединить в своем приложении вывод графики и звука, обработку устройств ввода и датчиков, как отображать графику с помощью библиотеки OpenGL ES и др. Издание предназначено для разработчиков мобильных приложений, как начинающих так и более опытных, уже знакомых с программированием под Android с использованием Android SDK.
Ретабоуил, С. Android NDK / С. Ретабоуил, пер. с англ. А. Н. Киселева. - 2-е изд. - Москва : ДМК Пресс, 2016. - 518 с. - ISBN 978-5-97060-394-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/2045962 (дата обращения: 08.05.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

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

2-е издание

Москва, 2016

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

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

УДК 004.451.9Android
ББК 32.973.26-018.2
P31

Ретабоуил Сильвен
Р31   Android NDK: руководство для начинающих. 2-е изд. / Пер. с 
анг. Киселева А. Н. – М.: ДМК Пресс, 2016. – 518 с.: ил.

ISBN 978-5-97060-394-9

В книге показано, как создавать мобильные приложения для 
платформы 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-78398-964-5 (анг.) 
Copyright © 2015 Packt Publishing
ISBN 978-5-97060-394-9 (рус.) 
© Оформление, ДМК Пресс, 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.

Доступ онлайн
524 ₽
В корзину