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

Android NDK

Покупка
Артикул: 712442.01.99
К покупке доступен более свежий выпуск Перейти
В книге показано, как создавать мобильные приложения для платформы 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/1027808 (дата обращения: 07.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.

К покупке доступен более свежий выпуск Перейти