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