Поиск…


замечания

Что такое Android NDK?

Android Native Development Kit (NDK) является вспомогательным инструментом для Android SDK, который позволяет создавать части приложений на C / C ++. Это полезно для:

  • Совместное использование компонентов приложений на разных платформах (Android, iOS, Linux и т. Д.)
  • Повышение производительности для критических частей
  • Повторное использование существующих библиотек C / C ++

NDK предоставляет заголовки и библиотеки, которые позволяют разработчику создавать действия, обрабатывать ввод пользователей, использовать аппаратные датчики, доступ к ресурсам приложений и т. Д. - все это время программирования на C / C ++.

Версии

Версия Дата выхода
r12 2016-06-09
r11 2016-03-09
r10 2014-07-01

Начало работы с 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, и вы также можете делать приложения для обработки изображений.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow