- PVSM.RU - https://www.pvsm.ru -
Привет! Меня давно интересовал вопрос, насколько 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 [1]).
Следующим шагом необходимо поставить на машину NDK и настроить переменные окружения. Рекомендую ставить не самую свежую версию ndk, так как с ней бывают глюки. Сам поставил ndk-r10d. Почитать инструкции здесь: Ubuntu and SDK [2] | NDK Getting Started [3] | Tools, ADB, SDK, NDK для mac [4].
Теперь рассмотрим создание простейшего консольного сумматора двух целых чисел. Создадим директорию 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 [5], но я приведу лишь минимум необходимого содержания для компиляции:
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
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka-pod-android/202677
Ссылки в тексте:
[1] Debug mode: https://www.kingoapp.com/root-tutorials/how-to-enable-usb-debugging-mode-on-android.htm
[2] Ubuntu and SDK: http://askubuntu.com/questions/318246/complete-installation-guide-for-android-sdk-adt-bundle-on-ubuntu
[3] NDK Getting Started: https://developer.android.com/ndk/guides/index.html
[4] Tools, ADB, SDK, NDK для mac: https://wiki.appcelerator.org/display/community/Managing+the+Android+SDK+and+NDK+on+OSX+using+Homebrew
[5] доки по Android.mk: https://developer.android.com/ndk/guides/android_mk.html
[6] Источник: https://habrahabr.ru/post/313516/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.