android-ndk Tutorial
Erste Schritte mit android-ndk
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
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\\sdkund
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)
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.
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
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,
Bauen Sie das Projekt erneut auf (Strg + F9) ,
Beim Erstellen finden Sie die Klassendatei, die beim Erstellen so erstellt wurde:
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)
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)
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
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
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.
Führen Sie nun die Anwendung aus. Sie erhalten die Ausgabe für dieses Beispiel als 10.
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.










