android-ndk учебник
Начало работы с android-ndk
Поиск…
замечания
Что такое Android NDK?
Android Native Development Kit (NDK) является вспомогательным инструментом для Android SDK, который позволяет создавать части приложений на C / C ++. Это полезно для:
- Совместное использование компонентов приложений на разных платформах (Android, iOS, Linux и т. Д.)
- Повышение производительности для критических частей
- Повторное использование существующих библиотек C / C ++
NDK предоставляет заголовки и библиотеки, которые позволяют разработчику создавать действия, обрабатывать ввод пользователей, использовать аппаратные датчики, доступ к ресурсам приложений и т. Д. - все это время программирования на C / C ++.
Версии
Начало работы с Android NDK с простым примером
Используя Android Studio 2.2 и выше Native Development Kit (NDK), вы можете использовать для компиляции кода на C и C ++.
Вы можете использовать NDK, вручную загрузив NDK и создав его или через CMake.
Здесь я дам поток процессов для ручной установки NDK и пример кода,
На основе вашей ОС системы вы можете загрузить NDK из этого места https://developer.android.com/ndk/downloads/index.html .
После загрузки укажите путь в переменной среды системы как имя переменной « NDK_PROJECT_PATH » и значение переменной «местоположение хранимого пути NDK».
Затем, чтобы интегрировать NDK с Android Studio, после создания нового проекта Android,
В gradle - локальные свойства добавляют местоположение пути sdk как
sdk.dir=F\:\\gowtham\\Android\\sdkа также
android.useDeprecatedNdk = true
Затем нажмите «Сборка - сделать проект» (Ctrl + f9).
Ваш проект будет успешно создан и получит BUILD SUCCESFUL в построении градации сообщений, как показано ниже
Затем в терминале сначала он будет содержать путь к проекту
Там добавляется cd app/src/main
Путь будет простираться от пути проекта до основного.
Затем снова Build - Make Project (Ctrl + f9).
Теперь вы найдете в папке отладки app-build-intermediates-classes-debug , как показано ниже.
Теперь создайте новый файл класса Java в приложении / src / main / java. Здесь я создал java-файл с именем NativeClass
Напишите простую функцию вызова с именем функции и входом для функции. Здесь я написал функцию в качестве примера и дал два целочисленных ввода для нее,
Снова создайте проект (Ctrl + f9) ,
Когда вы создадите, вы найдете файл класса, созданный в сборке, как это,
Then,in terminal
`-Javah -d jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass
где, - d - для вывода каталога - JNI файл -Generate JNI-стиль заголовка ( по умолчанию) - путь к классам - для которых для загрузки классов
Теперь создадим проект (Ctrl + f9), вы найдете созданную папку jni, и файл заголовка будет создан с именем, указанным вами в терминале раньше, как показано ниже
Теперь скопируйте файл заголовка и сохраните его как .cpp или .c файл с тем же именем заголовочного файла в jni-папке.
Я создал файл cpp, как показано ниже
Delete everything before **JNIEXPORT line** in this file and **add header file name** alone.
Here I am for simple example just adding two numbers and returning value to android java.
Application_com_ndkapplication_NativeClass.cpp
#include <application_com_ndkapplication_NativeClass.h>
JNIEXPORT jint JNICALL Java_application_com_ndkapplication_NativeClass_example
(JNIEnv *, jclass , jint as , jint bs){
return (as + bs);
}
И для этого примера нет необходимости добавлять какую-либо функцию в заголовочный файл.
Создайте новый файл с именем Android.mk и Application.mk в папке Jni
Файл Android.mk предназначен для описания ваших источников в системе сборки.
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := application_com_ndkapplication_NativeClass.cpp
LOCAL_LDLIBS += -llog
LOCAL_MODULE := exp-jni
include $(BUILD_SHARED_LIBRARY)
узнать подробности об этом файле, прочитав по этой ссылке https://developer.android.com/ndk/guides/android_mk.html
Application.mk, который описывает собственные модули, которые требуется вашему приложению.
Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti –fexceptions
APP_ABI := armeabi-v7a armeabi arm64-v8a mips mips64 x86 x86_64
APP_PLATFORM := android-16
чтобы узнать подробности об этом файле, прочитайте по этой ссылке https://developer.android.com/ndk/guides/application_mk.html
Now build the project again **(Ctrl + f9)**, you will find the **armeabi-v7a, armeabi, arm64-v8a ,mips, mips64, x86 and x86_64** folder created inside jniLibs.
Затем в основной активности передайте вход и получите вывод для файла родного класса.
int a = 5, b = 5, res ;
res = NativeClass.example(((int) a),((int) b));
TextView textView = (TextView) this.findViewById(R.id.tv);
textView.setText(new Integer(res).toString());
здесь я дал два целых числа, вводимых через a, b и получив выход из переменной res.
Полученный вывод отображается на экране, перейдя в TextView.
И не забудьте добавить библиотеку, которую вы указали в файле Android.mk как LOCAL_MODULE, например,
static {
System.loadLibrary("exp-jni");
}
Наконец, снова создайте проект (Ctrl + f9), вы найдете файлы .so, созданные под каждой папкой armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 и x86_64.
Затем запустите приложение, вы получите результат для этого примера как 10.
Это базовая программа для новичков NDK, здесь можно импортировать библиотеку OpenCV, и вы также можете делать приложения для обработки изображений.










