ARM и Android: Программирование


arm-i-android-programmirovanie_1.jpg

Продолжим увлекательное путешествие в мир программирования для Android. Но это не то программирование, про которое пишут толстые книги. В этом мире программы, не заметные пользователю, берут под контроль управление питанием системы и перехватывают пользовательский ввод.

Итак, разберемся, что же мы имеем. Самый важный инструментарий для нас — NDK. При установке новейшей (на момент написания текста) версии NDK — r7 — где-то в недрах вашей файловой системы должна появиться директория android-ndk-r7. Ее мы будем называть NDK_ROOT (включая полный путь к ней).

В NDK_ROOT вы увидите множество поддиректорий непонятного назначения. Не отчаивайтесь: во всем этом легко разобраться, тем более что для наших хакерских целей понадобится не весь NDK. Одна из важнейших для нас директорий — NDK_ROOT/ toolchains. Как видно по названию, она содержит различные версии инструментария сборки приложений для Android. Фактически это стандартный инструментарий сборки приложений GNU/Linux. Директория NDK_ROOT/toolchains включает две поддиректории: x86-4.4.3, предназначенная для сборки программ Android для платформы x-86, и arm-linux-androideabi-4.4.3.

 ориентированная на платформу ARM (для другой версии NDK, цифры, естественно, могут быть другими). Раз мы условились писать программы для ARM, переходим в эту директорию. В ее поддиректориях есть все необходимое для сборки и отладки программ Linux на платформе ARM. Напомню, что сами инструменты сборки предназначены для запуска на ПК архитектуры Intel, а результатом сборки станут про грам мы, для вы полнения кото рых по тре бует ся про цес сор семейства ARM (или его эмулятор).

Вторая важная директория — NDK_ROOT/platforms. Она содержит библиотеки и заголовочные файлы для API Android различных версий (уровней). В ней вы найдете несколько поддиректорий вида android-x, где x — номер уровня API. Между уровнями API и версиями ОС Android существует четкое соответствие. Ниже приводится перечень уровней API для наиболее популярных на данный момент версий Android (полную таблицу вы можете найти на сайте разработчиков Android — developer.android.com).

В каждой директории android-x имеются поддиректории arch-x86 и arch-arm, для двух целевых платформ. Каждая директория содержит поддиректории /usr/ lib и /usr/include — то, чего нам так не хватало для сборки программ под Android. Стоит отметить, что не все библиотеки Android ме ня лись при пе реходе от од но- го уровня API к другому. В NDK-r6 файлы некоторых библиотек представляли собой символьные ссылки на файлы тех же библиотек более ранних уровней API.

Сравнивая API разных уровней, вы заметите, что с номером уровня количество библиотек растет — и не только потому, что в новых версиях Android появляются новые компоненты, но и потому, что более новые версии Android предоставляют более широкий доступ на уровне Linux API к компонентам системы, введенным ранее. Итак, желая, чтобы ваши про граммы по лучили максималь ный доступ к функциям Android, экспериментируйте с новейшей версией ОС. Нетрудно видеть также, что разные уровни API обладают обратной совместимостью. Рассмотрим наиболее интересные возможности, доступные программам Linux в разных версиях Android.

Android 1.5 (уровень API 3) На этом уровне нам доступны библиотека Bionic, библиотека времени выполнения C++ в несколько урезанном варианте, интерфейс работы с потоками POSIX Threads, тоже слегка урезанный, и стандартная библиотека математических функций. Все перечисленное линкуется с исполняемым файлом автоматически; специальных команд для подключения библиотек указывать не нужно.

Библиотека zlib (работа со сжатыми данными) должна подключаться явно (с помощью ключа —lz), как и библиотека libdl, требуемая для динамической загрузки разделяемых библиотек.

Android 2.0 -2.3 Добавлены поддержка OpenGL ES 2.0 (библиотека libGLESv2.so, уровень API 5), Android bitmap API (уровень API 8), поддержка EGL (libEGL.so, уровень API 9) и поддержка OpenSL ES (libOpenSLES.so, уровень API 9)

API 9 вообще можно назвать прорывом в области программирования для Android: именно в нем появился интерфейс программирования Android native application API для программ Linux (библиотека libandroid.so). Эта библиотека позволяет приложению Linux взаимодействовать с системой так же, как это делает приложение, написанное на Java (включая графический ввод-вывод).

Android 4 (уровень API 14) Добавлена поддержка интерфейса OpenMAX AL (библиотека libOpenMAXAL.so), позволяющего работать с аппаратно-ускоренными потоками мультимедиа-данных.

Теперь у нас есть все необходимые инструменты для написания программ Linux под Android. Осталось только овладеть несколькими трюками, чтобы научиться правильно (или неправильно — это с какой стороны взглянуть) ими пользоваться.

Комментарии