Створення консольного додатка за допомогою 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.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.