android-ndk Zelfstudie
Aan de slag met android-ndk
Zoeken…
Opmerkingen
Wat is de Android NDK?
Android Native Development Kit (NDK) is een hulpmiddel voor Android SDK waarmee delen van apps kunnen worden ingebouwd in C / C ++. Dit is handig voor:
- Applicatiecomponenten delen over platforms (Android, iOS, Linux, etc.)
- Verbetering van de prestaties voor kritieke porties
- Bestaande C / C ++ -bibliotheken opnieuw gebruiken
De NDK biedt headers en bibliotheken waarmee de ontwikkelaar activiteiten kan bouwen, gebruikersinvoer kan verwerken, hardwaresensoren kan gebruiken, toegang heeft tot toepassingsbronnen en meer - al die tijd programmeren in C / C ++.
versies
Aan de slag met Android NDK met eenvoudig voorbeeld
Met Android Studio 2.2 en hoger Native Development Kit (NDK) kunt u C- en C ++ -code compileren.
U kunt NDK gebruiken door NDK handmatig te downloaden en te bouwen of via CMake.
Hier geef ik een processtroom voor het handmatig installeren van NDK en een voorbeeldcode,
Op basis van uw systeem-besturingssysteem kunt u NDK downloaden vanaf deze locatie https://developer.android.com/ndk/downloads/index.html .
Geef na het downloaden het pad in Systeemomgevingsvariabele als variabelenaam " NDK_PROJECT_PATH " en variabele waarde "locatie van opgeslagen NDK-pad".
Vervolgens, om NDK te integreren met Android Studio, na het maken van een nieuw Android-project,
In gradle - lokale eigenschappen voegen locatie van sdk-pad toe
sdk.dir=F\:\\gowtham\\Android\\sdken
android.useDeprecatedNdk = true
Druk vervolgens op Build - Project maken (Ctrl + f9).
Uw project zal met succes worden gebouwd en zal GEBOUWD SUCCESVOL worden in bericht gradle build, zoals hieronder getoond
Vervolgens bevat het in Terminal aanvankelijk het pad van het project
Voeg daar een cd app/src/main
Pad loopt van projectpad naar main.
Vervolgens opnieuw Build - Make Project (Ctrl + f9).
Nu vindt u onder de app-build – tussenproducten – klassen-foutopsporingsmap , zoals hieronder weergegeven.
Maak nu een nieuw Java Class-bestand onder een app / src / main / java, hier heb ik een java-bestand gemaakt met de naam NativeClass
Schrijf een eenvoudige roepende functie met functienaam en invoer voor de functie, hier heb ik de functie als voorbeeld geschreven en er twee gehele getallen aan gegeven,
Bouw opnieuw het project (Ctrl + f9) ,
Wanneer je bouwt, zul je het klassenbestand vinden dat is gemaakt onder build als volgt,
Then,in terminal
`-Javah -d jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass
waar, - d - voor uitvoermap - jni -Generate JNI-stijl headerbestand (standaard) - classpath - waarvoor klassen worden geladen
Bouw nu het project (Ctrl + f9), u zult een jni- map vinden die is gemaakt en een koptekstbestand met de naam die u eerder in terminal hebt opgegeven, zoals hieronder wordt weergegeven
Kopieer nu het koptekstbestand en sla het op als .cpp- of .c- bestand met dezelfde naam van het koptekstbestand in de jni-map.
Ik heb een cpp-bestand gemaakt zoals hieronder wordt weergegeven
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);
}
En voor dit voorbeeld is het niet nodig om een functie toe te voegen aan het headerbestand.
Maak een nieuw bestand met de naam Android.mk en Application.mk in JNI map
Het Android.mk-bestand beschrijft uw bronnen voor het buildsysteem.
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)
voor meer informatie over dit bestand, lees via deze link https://developer.android.com/ndk/guides/android_mk.html
Application.mk die de native modules beschrijft die uw app vereist.
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
voor meer informatie over dit bestand, lees via deze 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.
Geef vervolgens in hoofdactiviteit de invoer door en ontvang uitvoer voor native class-bestand.
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 gaf ik twee gehele getallen input via a, b en krijg output van variabele res.
En verkregen uitvoer wordt op het scherm weergegeven door naar TextView te gaan.
En vergeet niet om de bibliotheek die u in het Android.mk- bestand heeft opgegeven als LOCAL_MODULE op deze manier toe te voegen,
static {
System.loadLibrary("exp-jni");
}
Bouw ten slotte het project opnieuw (Ctrl + f9), u vindt de .so-bestanden die zijn gemaakt onder elke map armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 en x86_64.
Voer nu de toepassing uit, u krijgt voor dit voorbeeld uitvoer als 10.
Dit is een basisprogramma voor NDK-beginners, de OpenCV-bibliotheek kan hier worden geïmporteerd en u kunt ook beeldverwerkingstoepassingen uitvoeren.










