Ricerca…


Osservazioni

Cos'è l'NDK di Android?

Android Native Development Kit (NDK) è uno strumento complementare per Android SDK che consente di integrare porzioni di app in C / C ++. Questo è utile per:

  • Condivisione dei componenti delle applicazioni su più piattaforme (Android, iOS, Linux, ecc.)
  • Miglioramento delle prestazioni per le parti critiche
  • Riutilizzare le librerie C / C ++ esistenti

NDK fornisce intestazioni e librerie che consentono allo sviluppatore di creare attività, gestire l'input dell'utente, utilizzare sensori hardware, accedere alle risorse dell'applicazione e altro ancora: tutto durante la programmazione in C / C ++.

Versioni

Versione Data di rilascio
R12 2016/06/09
r11 2016/03/09
r10 2014/07/01

Iniziare con Android NDK con un semplice esempio

Utilizzando Android Studio 2.2 e superiore Native Development Kit (NDK) è possibile utilizzare per compilare codice C e C ++.

Puoi utilizzare NDK scaricando manualmente NDK e costruilo o tramite CMake.

Qui fornirò il flusso di processo per l'installazione manuale di NDK e un codice di esempio,

In base al sistema operativo del sistema, è possibile scaricare NDK da questa posizione https://developer.android.com/ndk/downloads/index.html .

Dopo il download, fornire il percorso nella variabile di ambiente di sistema come nome variabile " NDK_PROJECT_PATH " e il valore variabile "percorso del percorso memorizzato NDK".

  • Successivamente, per integrare NDK con Android Studio, dopo aver creato un nuovo progetto Android,

    In gradle - le proprietà locali aggiungono la posizione del percorso sdk come

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

    e

      android.useDeprecatedNdk = true
    
  • Quindi, premi Costruisci - Crea progetto (Ctrl + f9).

    Il tuo progetto sarà costruito con successo e riceverà BUILD SUCCESFUL nel messaggio gradle build, come mostrato di seguito

inserisci la descrizione dell'immagine qui

Quindi in Terminal, inizialmente conterrà il percorso del progetto

Vi aggiungo cd app/src/main

Il percorso si estenderà dal percorso del progetto al principale.

Quindi, ancora Build - Crea progetto (Ctrl + f9).

Ora troverai sotto la cartella app-build-intermediate-intermediate-classes-debug , come mostrato sotto.

inserisci la descrizione dell'immagine qui

Ora crea un nuovo file di classe Java sotto un'app / src / main / java, qui ho creato il file java denominato NativeClass

inserisci la descrizione dell'immagine qui

Scrivi una semplice funzione di chiamata con il nome della funzione e l'input per la funzione, Qui ho scritto la funzione come esempio e gli ho dato due interi,

inserisci la descrizione dell'immagine qui

Costruisci di nuovo il progetto (Ctrl + F9) ,

Quando costruisci, troverai il file di classe creato sotto build come questo,

inserisci la descrizione dell'immagine qui

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

dove, - d - per la directory di output - jni -Generate File di intestazione in stile JNI (predefinito) - classpath - per il quale caricare le classi

Ora crea il progetto (Ctrl + f9), troverai la cartella jni creata e un file di intestazione verrà creato con il nome che hai specificato nel terminale, come mostrato sotto

inserisci la descrizione dell'immagine qui

Ora copia il file di intestazione e salva come file .cpp o .c con lo stesso nome del file di intestazione nella cartella jni.

Ho creato un file cpp come mostrato di seguito

inserisci la descrizione dell'immagine qui

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

    }

E per questo esempio non è necessario aggiungere alcuna funzione nel suo file di intestazione.

Crea un nuovo file denominato Android.mk e Application.mk nella cartella Jni

Il file Android.mk descrive i tuoi sorgenti nel sistema di generazione.

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)

per conoscere i dettagli di questo file leggere da questo link https://developer.android.com/ndk/guides/android_mk.html

inserisci la descrizione dell'immagine qui

Application.mk che descrive i moduli nativi richiesti dalla tua app.

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

per conoscere i dettagli di questo file leggere da questo link https://developer.android.com/ndk/guides/application_mk.html

inserisci la descrizione dell'immagine qui

 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.

Quindi, nell'attività principale passare l'input e ottenere l'output per il file di classe 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());

qui ho dato due interi input attraverso a, b e ottenuto l'output dalla variabile res.

E l'output ottenuto viene visualizzato sullo schermo passando a TextView.

E non dimenticare di aggiungere la libreria che hai specificato nel file Android.mk come LOCAL_MODULE come questo,

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

Infine ricostruisci il progetto (Ctrl + F9), troverai i file .so creati sotto ogni cartella armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 e x86_64.

inserisci la descrizione dell'immagine qui

Quindi ora esegui l'applicazione, riceverai output per questo esempio come 10.

inserisci la descrizione dell'immagine qui

Questo è un programma di base per principianti NDK, la libreria OpenCV può essere importata qui e puoi anche fare applicazioni di elaborazione delle immagini.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow