Создание консольного приложения с помощью Android NDK

от автора

Привет! Меня давно интересовал вопрос, насколько 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 = %d\n", 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.
ссылка на оригинал статьи https://habrahabr.ru/post/313516/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *