android-ndk Samouczek
Rozpoczęcie pracy z Android-ndk
Szukaj…
Uwagi
Co to jest Android NDK?
Android Native Development Kit (NDK) to narzędzie towarzyszące zestawowi SDK systemu Android, które pozwala na wbudowanie części aplikacji w C / C ++. Jest to przydatne w przypadku:
- Udostępnianie komponentów aplikacji na różnych platformach (Android, iOS, Linux itp.)
- Poprawa wydajności krytycznych porcji
- Ponowne użycie istniejących bibliotek C / C ++
NDK zapewnia nagłówki i biblioteki, które pozwalają deweloperowi budować działania, obsługiwać dane wejściowe użytkownika, używać czujników sprzętowych, uzyskiwać dostęp do zasobów aplikacji i więcej - cały czas programując w C / C ++.
Wersje
Rozpoczęcie pracy z Androidem NDK z prostym przykładem
Korzystając z systemu Android Studio 2.2 i nowszego zestawu do programowania natywnego (NDK), można użyć do kompilacji kodu C i C ++.
Możesz użyć NDK, ręcznie pobierając NDK i budując go lub przez CMake.
Tutaj podam przebieg procesu ręcznej instalacji NDK i przykładowego kodu,
W oparciu o system operacyjny możesz pobrać NDK z tej lokalizacji https://developer.android.com/ndk/downloads/index.html .
Po pobraniu podaj ścieżkę w zmiennej środowiskowej jako nazwę zmiennej „ NDK_PROJECT_PATH ” i wartość zmiennej „lokalizacja ścieżki przechowywanej w NDK”.
Następnie, aby zintegrować NDK z Android Studio, po utworzeniu nowego projektu na Androida,
W gradle - właściwości lokalne dodają lokalizację ścieżki sdk jak
sdk.dir=F\:\\gowtham\\Android\\sdki
android.useDeprecatedNdk = true
Następnie naciśnij Build - Make Project (Ctrl + f9).
Twój projekt zostanie pomyślnie skompilowany i otrzyma ZBUDOWANY SUKCES w kompilacji stopni wiadomości, jak pokazano poniżej
Następnie w Terminalu początkowo będzie zawierać ścieżkę projektu
Dodaj cd app/src/main
Ścieżka będzie rozciągać się od ścieżki projektu do głównej.
Następnie ponownie Build - Make Project (Ctrl + f9).
Teraz znajdziesz folder debugowania budowania aplikacji - półprodukty - klasy - jak pokazano poniżej.
Teraz utwórz nowy plik Java Class w aplikacji / src / main / java, tutaj utworzyłem plik Java o nazwie NativeClass
Napisz prostą funkcję wywołującą z nazwą funkcji i wejściem dla funkcji. Tutaj napisałem funkcję jako przykład i podałem jej dwie liczby całkowite,
Ponownie skompiluj projekt (Ctrl + F9) ,
Podczas kompilacji znajdziesz plik klasy utworzony w trakcie kompilacji w ten sposób,
Then,in terminal
`-Javah -d jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass
gdzie, - d - dla katalogu wyjściowego - jni- Generuj plik nagłówkowy w stylu JNI (domyślnie) - ścieżka klasy - dla której ładowane są klasy
Teraz skompiluj projekt (Ctrl + F9), znajdziesz folder jni utworzony i plik nagłówka zostanie utworzony z nazwą podaną wcześniej w terminalu, jak pokazano poniżej
Teraz skopiuj plik nagłówka i zapisz jako plik .cpp lub .c o tej samej nazwie pliku nagłówka w folderze jni.
Utworzyłem plik CPP, jak pokazano poniżej
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);
}
W tym przykładzie nie trzeba dodawać żadnych funkcji w pliku nagłówkowym.
Utwórz nowy plik o nazwie Android.mk i Application.mk w folderze Jni
Plik Android.mk służy do opisania źródeł w systemie kompilacji.
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)
aby poznać szczegóły na temat tego pliku, przeczytaj ten link https://developer.android.com/ndk/guides/android_mk.html
Application.mk, który opisuje rodzime moduły wymagane przez twoją aplikację.
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
aby poznać szczegóły na temat tego pliku, przeczytaj ten 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.
Następnie w głównym działaniu przekaż dane wejściowe i uzyskaj dane wyjściowe dla natywnego pliku klasy.
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());
tutaj podałem dwie liczby całkowite wprowadzone przez a, b i otrzymałem wynik ze zmiennej res.
Uzyskane dane wyjściowe są wyświetlane na ekranie poprzez przekazanie do TextView.
I nie zapomnij dodać biblioteki określonej w pliku Android.mk jako LOCAL_MODULE w ten sposób,
static {
System.loadLibrary("exp-jni");
}
Na koniec skompiluj projekt ponownie (Ctrl + F9), znajdziesz pliki .so utworzone pod każdym folderem armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 i x86_64.
Następnie uruchom aplikację, otrzymasz wynik dla tego przykładu jako 10.
Jest to podstawowy program dla początkujących w NDK. Można tu zaimportować bibliotekę OpenCV, a także aplikacje do przetwarzania obrazów.










