Привет! Меня давно интересовал вопрос, насколько Android есть Linux и можно ли в нем запускать терминальные (консольные) приложения, минуя песочницу под названием Dalvik.
Для этого я освоил способ создания приложений на языке C/C++ для Android с использованием Android NDK. NDK позволяет создавать как библиотеки с native-методами (C/C++) для Java, так и исполняемые приложения для запуска из командной строки.
Здесь я расскажу, как сделать первые шаги быстро и просто. Заранее оговорюсь, что Android NDK для Windows — это неудобно, поэтому далее рассматриваются OSX и Linux. Виртуалка c Ubuntu в помощь!
Написанное рассчитано на тех, кто уже пробовал следующие действия:
1. Создавал hello world на C/C++;
2. Устанавливал и пробовал ADB, SDK.
3. Включал режим отладки на Android-смартфоне (Debug mode).
Следующим шагом необходимо поставить на машину NDK и настроить переменные окружения. Рекомендую ставить не самую свежую версию ndk, так как с ней бывают глюки. Сам поставил ndk-r10d. Почитать инструкции здесь: Ubuntu and SDK | NDK Getting Started | Tools, ADB, SDK, NDK для mac.
Теперь рассмотрим создание простейшего консольного сумматора двух целых чисел. Создадим директорию simpleApp и поместим в ней поддиректорию jni. В jni необходимо создать файл с исходным кодом нашего приложения simpleApp.c со следующим содержимым:
#include <stdio.h>
int main() {
int a,b;
printf("Enter two numbers a and b: ");
scanf("%d %d", &a, &b);
printf("a+b = %dn", a+b);
return 0;
}
Затем в этой же директории необходимо создать файл с настройками компиляции Android.mk. Подробное описание этого файла доступно здесь доки по Android.mk, но я приведу лишь минимум необходимого содержания для компиляции:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := simpleApp
LOCAL_SRC_FILES := simpleApp.c #файл с исходниками
APP_ABI := armeabi #целевая платформа ARM (тип процессора в телефоне)
TARGET_ARCH_ABI := armeabi
include $(BUILD_EXECUTABLE) #тип компиляции - приложение или библиотека
После подготовки simppleApp.c и Android.mk входим в директорию simpleApp через terminal и запускаем команду ndk-build:
$ cd simpleApp/
simpleApp$ ndk-build
[armeabi] Compile thumb : simpleApp <= simpleApp.c
[armeabi] Executable : simpleApp
[armeabi] Install : simpleApp => libs/armeabi/simpleApp
Теперь в директории simpleApp появилась папка /libs/. В ней должны появиться поддиректории с исполняемыми файлами для разных платформ. Возьмем, например, файл для платформы arm из директории armeabi (подойдет для многих распространенных аппаратов) и скопируем его в реальный телефон в директорию /data/local/tmp с помощью adb и команды push:
simpleApp$ cd libs/armeabi/
armeabi$ adb push simpleApp /data/local/tmp
[100%] /data/local/tmp/simpleApp
Теперь заходим в устройство через терминал, переходим в директорию с нашим приложением simpleApp и запускаем его:
armeabi$ adb shell
shell@m3:/ $ cd /data/local/tmp
shell@m3:/data/local/tmp $ ./simpleApp
Enter two numbers a and b: 6 3
a+b = 9
Отлично! Консольное приложение заработало, запросило ввод чисел и выдало правильный результат! Надеюсь, мои заметки помогут кому-то на первых шагах освоения инструмента Android NDK.
Автор: hakey