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

Wersja Data wydania
r12 2016-06-09
r11 2016-03-09
r10 01.07.2014

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\\sdk
    

    i

      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

wprowadź opis zdjęcia tutaj

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.

wprowadź opis zdjęcia tutaj

Teraz utwórz nowy plik Java Class w aplikacji / src / main / java, tutaj utworzyłem plik Java o nazwie NativeClass

wprowadź opis zdjęcia tutaj

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,

wprowadź opis zdjęcia tutaj

Ponownie skompiluj projekt (Ctrl + F9) ,

Podczas kompilacji znajdziesz plik klasy utworzony w trakcie kompilacji w ten sposób,

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

 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.

wprowadź opis zdjęcia tutaj

Następnie uruchom aplikację, otrzymasz wynik dla tego przykładu jako 10.

wprowadź opis zdjęcia tutaj

Jest to podstawowy program dla początkujących w NDK. Można tu zaimportować bibliotekę OpenCV, a także aplikacje do przetwarzania obrazów.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow