Primeros pasos con Android-ndk

Primeros pasos con Android NDK con un ejemplo simple

Con Android Studio 2.2 y un kit de desarrollo nativo (NDK) superior, puede usarlo para compilar código C y C++.

Puede usar NDK descargándolo manualmente y compilándolo o a través de CMake.

Aquí daré el flujo del proceso para instalar manualmente NDK y un código de ejemplo,

Según el sistema operativo de su sistema, puede descargar NDK desde esta ubicación https://developer.android.com/ndk/downloads/index.html.

Después de la descarga, proporcione la ruta en la variable de entorno del sistema como nombre de variable “NDK_PROJECT_PATH” y valor de variable “ubicación de la ruta almacenada en el NDK”.

  • Luego, para integrar NDK con Android Studio, después de crear un nuevo proyecto de Android,

    In gradle – local properties add location of sdk path like

      sdk.dir=F\:\\gowtham\\Android\\sdk
    

    and

       android.useDeprecatedNdk = true
    
  • Luego, presione Build – Make Project (Ctrl + f9).

    Your project will be successfully build and will get BUILD SUCCESFUL in message gradle build, as shown below

ingrese la descripción de la imagen aquí

Luego, en la Terminal, inicialmente contendrá la ruta del proyecto.

Ahí agrega cd app/src/main

La ruta se extenderá desde la ruta del proyecto hasta la principal.

A continuación, otra vez Construir – Crear proyecto (Ctrl + f9).

Ahora lo encontrará en la carpeta app-build–intermediates–classes–debug, como se muestra a continuación.

ingrese la descripción de la imagen aquí

Ahora, cree un nuevo archivo de clase Java en app/src/main/java, Aquí creé un archivo java llamado NativeClass

ingrese la descripción de la imagen aquí

Escriba una función de llamada simple con el nombre de la función y la entrada para la función, Aquí escribí la función como ejemplo y le di dos entradas enteras,

ingrese la descripción de la imagen aquí

Nuevamente construye el proyecto (Ctrl + f9),

Cuando construya, encontrará el archivo de clase creado en compilación como esta,

ingrese la descripción de la imagen aquí

Then,in terminal 
    `-Javah  -d  jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass

dónde , -d – for output directory -jni -Generate JNI-style header file (default) -classpath – for which to load classes

Ahora construye el proyecto (Ctrl + f9), encontrará la carpeta jni creada y se creará un archivo de encabezado con el nombre que especificó en la terminal antes, como se muestra a continuación

ingrese la descripción de la imagen aquí

Ahora copie el archivo de encabezado y guárdelo como archivo .cpp o .c del mismo nombre del archivo de encabezado en jni carpeta

Creé un archivo cpp como se muestra a continuación

ingrese la descripción de la imagen aquí

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);

    }

Y para este ejemplo, no es necesario agregar ninguna función en su archivo de encabezado.

Cree un nuevo archivo llamado Android.mk y Application.mk en la carpeta Jni

El archivo Android.mk es para describir sus fuentes al sistema de compilación.

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)

para conocer detalles sobre este archivo, lea desde este enlace https://developer.android.com/ndk/guides/android_mk.html

ingrese la descripción de la imagen aquí

Application.mk que describe los módulos nativos que requiere su aplicación.

Aplicación.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

para conocer detalles sobre este archivo, lea desde este enlace https://developer.android.com/ndk/guides/application_mk.html

ingrese la descripción de la imagen aquí

 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.

Luego, en la actividad principal, pase la entrada y obtenga la salida para el archivo de clase nativo.

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());

aquí ingresé dos números enteros a través de a, b y obtuve la salida de la variable res.

Y la salida obtenida se muestra en la pantalla al pasar a TextView.

Y no olvide agregar la biblioteca que especificó en el archivo Android.mk como LOCAL_MODULE así,

static {
        System.loadLibrary("exp-jni");
  }

Finalmente, vuelva a compilar el proyecto (Ctrl + f9), encontrará los archivos .so creados en cada carpeta armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 y x86_64.

ingrese la descripción de la imagen aquí

Luego, ahora ejecute la aplicación, obtendrá un resultado para este ejemplo como 10 .

ingrese la descripción de la imagen aquí

Este es un programa básico para principiantes de NDK, la biblioteca OpenCV se puede importar aquí y también puede hacer aplicaciones de procesamiento de imágenes.