Suche…


Bemerkungen

Was ist das Android NDK?

Das Android Native Development Kit (NDK) ist ein Zusatzprogramm zum Android SDK, mit dem Teile von Apps in C / C ++ integriert werden können. Dies ist nützlich für:

  • Teilen von Anwendungskomponenten über Plattformen hinweg (Android, iOS, Linux usw.)
  • Verbesserung der Leistung für kritische Teile
  • Vorhandene C / C ++ - Bibliotheken wiederverwenden

Das NDK stellt Header und Bibliotheken bereit, mit denen der Entwickler Aktivitäten erstellen, Benutzereingaben verarbeiten, Hardwaresensoren verwenden, auf Anwendungsressourcen zugreifen kann und vieles mehr - während der gesamten Programmierung in C / C ++.

Versionen

Ausführung Veröffentlichungsdatum
r12 2016-06-09
r11 2016-03-09
r10 2014-07-01

Erste Schritte mit Android NDK mit einem einfachen Beispiel

Mit Android Studio 2.2 und höher (Native Development Kit, NDK) können Sie C- und C ++ - Code kompilieren.

Sie können NDK verwenden, indem Sie NDK manuell herunterladen und erstellen oder über CMake erstellen.

Hier werde ich den Prozessablauf für die manuelle Installation von NDK und einen Beispielcode angeben.

Basierend auf Ihrem System-Betriebssystem können Sie NDK von diesem Standort https://developer.android.com/ndk/downloads/index.html herunterladen.

Geben Sie nach dem Download den Pfad in der Systemumgebungsvariablen als Variablennamen „ NDK_PROJECT_PATH “ und den Variablenwert „Ort des gespeicherten NDK-Pfads“ an.

  • Als nächstes, um NDK mit Android Studio zu integrieren, nachdem Sie ein neues Android-Projekt erstellt haben,

    Fügen Sie in gradle - local properties die Position des SDK - Pfads hinzu

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

    und

      android.useDeprecatedNdk = true
    
  • Drücken Sie dann auf Erstellen - Projekt erstellen (Strg + F9).

    Ihr Projekt wird erfolgreich erstellt und wird in Builder für Nachrichtenaufbau BUILD SUCCESFUL erhalten (siehe unten)

Geben Sie hier die Bildbeschreibung ein

Dann wird es in Terminal zunächst den Pfad des Projekts enthalten

Fügen Sie dort cd app/src/main

Der Pfad erstreckt sich vom Projektpfad bis zum Hauptpfad.

Als nächstes erneut Erstellen - Projekt erstellen (Strg + F9).

Jetzt finden Sie unter App-Build-Intermediates-Klassen-Debug- Ordner, wie unten gezeigt.

Geben Sie hier die Bildbeschreibung ein

Erstellen Sie nun eine neue Java Class-Datei unter einer App / src / main / java. Hier habe ich eine Java-Datei mit dem Namen NativeClass erstellt

Geben Sie hier die Bildbeschreibung ein

Schreibe eine einfache aufrufende Funktion mit Funktionsnamen und Eingabe für die Funktion. Hier habe ich die Funktion als Beispiel geschrieben und zwei Ganzzahlen eingegeben,

Geben Sie hier die Bildbeschreibung ein

Bauen Sie das Projekt erneut auf (Strg + F9) ,

Beim Erstellen finden Sie die Klassendatei, die beim Erstellen so erstellt wurde:

Geben Sie hier die Bildbeschreibung ein

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

wo, - d - für Ausgabeverzeichnis - jni - Generieren Sie eine Header-Datei im JNI-Stil (Standard) - classpath - für die Klassen geladen werden sollen

Wenn Sie nun das Projekt erstellen (Strg + F9), finden Sie den Ordner jni erstellt. Eine Header-Datei wird mit dem Namen erstellt, den Sie zuvor in terminal angegeben haben (siehe unten)

Geben Sie hier die Bildbeschreibung ein

Kopieren Sie nun die Header-Datei und speichern Sie sie als .cpp- oder .c- Datei mit demselben Namen der Header-Datei im jni-Ordner.

Ich habe eine CPP-Datei erstellt (siehe unten)

Geben Sie hier die Bildbeschreibung ein

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

    }

In diesem Beispiel müssen Sie keine Funktion in die Header-Datei einfügen.

Erstellen Sie eine neue Datei mit den Namen Android.mk und Application.mk im Jni- Ordner

Die Android.mk-Datei beschreibt Ihre Quellen für das Build-System.

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)

Um Details zu dieser Datei zu erfahren, lesen Sie diesen Link https://developer.android.com/ndk/guides/android_mk.html

Geben Sie hier die Bildbeschreibung ein

Application.mk beschreibt die nativen Module, die Ihre App benötigt.

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

Weitere Informationen zu dieser Datei finden Sie unter folgendem Link: https://developer.android.com/ndk/guides/application_mk.html

Geben Sie hier die Bildbeschreibung ein

 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.

Übergeben Sie dann in der Hauptaktivität die Eingabe und erhalten Sie eine Ausgabe für die native Klassendatei.

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

Hier habe ich zwei Ganzzahlen eingegeben, die durch a, b eingegeben wurden, und die Ausgabe der Variablen res erhalten.

Die erhaltene Ausgabe wird auf dem Bildschirm angezeigt, indem Sie an TextView übergeben werden.

Und vergessen Sie nicht, die Bibliothek, die Sie in der Android.mk-Datei angegeben haben, als LOCAL_MODULE wie folgt hinzuzufügen ,

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

Erstellen Sie schließlich das Projekt erneut (Strg + F9). Sie finden die .so-Dateien, die unter den Verzeichnissen armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 und x86_64 erstellt werden.

Geben Sie hier die Bildbeschreibung ein

Führen Sie nun die Anwendung aus. Sie erhalten die Ausgabe für dieses Beispiel als 10.

Geben Sie hier die Bildbeschreibung ein

Dies ist ein grundlegendes Programm für NDK-Anfänger. Die OpenCV-Bibliothek kann hier importiert werden, und Sie können auch Bildverarbeitungsanwendungen ausführen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow