Pierwsze kroki z natywnym interfejsem Java (JNI)

Getting Started With Java Native Interface



Java Native Interface, w skrócie JNI, to interfejs programistyczny, który pozwala programistom Java uruchamiać kody i fragmenty z innych języków programowania w Javie. Jest dostarczany w połączeniu z niezbędnym zestawem Java Software Development Kit lub SDK (omówimy to w innym samouczku).

JNI jest również szanowany za swoją funkcję wywoływania API w celu wkradnięcia się do wirtualnej maszyny Java w aplikacjach Java. Dzięki temu programiści mogą wywoływać kod java w kodzie aplikacji natywnej.







Jeśli spędziłeś trochę czasu pracując z javą, prawdopodobnie natknąłeś się już na wiele problemów z wydajnością, które nieuchronnie pojawiają się na twojej drodze. Nie stanowi to problemu, gdy uruchamiasz ten sam kod w języku ojczystym, który może działać ponad osiemnaście razy szybciej w przypadku odczytu w skompilowanym modelu. Oprócz tego możesz również używać przestarzałych/niekompatybilnych procedur sprzętowych z kodami natywnymi w innych językach.



Ten samouczek zademonstruje, jak można wywołać kod maszynowy C/C++ z poziomu aplikacji Java.



Warunki wstępne

Będziesz potrzebować kilku rzeczy, aby poprawnie wykonać ten przewodnik. Należą do nich kompilator Java lub Javac.exe wraz z JVM, a także natywna metoda C generator (javah.exe). Wszystkie trzy są wbudowane w zestaw do tworzenia oprogramowania, więc jeśli to masz, wszystko jest w porządku. Oprócz tych trzech, będziesz także potrzebować plików definiujących JNI, w tym natywnych plików nagłówkowych i kompletnych plików bibliotecznych.





I oczywiście w samouczku o uruchamianiu kodów C i C++ użyjemy również kompilatora C do stworzenia biblioteki współdzielonej.

Komponenty JNI

JNI jest napędzany głównie przez dwa komponenty, a mianowicie h i javah. H jest komponentem pliku nagłówkowego, który zastępuje kody natywne kodem java, podczas gdy Javah sprawia, że ​​ten plik może być sam ładowany do plików nagłówkowych aplikacji.



Wywoływanie C/C++ z kodu Java

Krok 1: Pisanie kodu w Javie

Kod jest najpierw napisany w javie i spełnia trzy warunki. Po pierwsze, jest napisany metodą natywną, która zostanie wywołana później. Po drugie, musi załadować bibliotekę współdzieloną, której częścią jest kod natywny, a na koniec musi wywołać metody natywne.

Użyjmy tego kodu, aby zilustrować dalej:

Zwróć uwagę na linie 3 i 6; są to wiersze, w których zawarte są metody natywne. Kod, który ładuje biblioteki współdzielone, znajduje się w wierszu 10, co prowadzi do wywołania metody między wierszami od 12 do 15.

Krok 2: Kompilacja kodu java do kodu bajtowego

Drugi krok dotyczy kompilacji kodu java. Kompilator javac może wykonać tę pracę za nas; po prostu wydaj poniższe polecenie:

$javac Przykład1.Jawa

Krok 3: Utwórz pliki nagłówkowe C/C++

Następnie należy utworzyć pliki nagłówkowe w języku ojczystym. Te pliki nagłówkowe zasilają podpisy kodów natywnych.

Te pliki nagłówkowe można utworzyć za pomocą natywnego narzędzia javah, generatora skrótów C dołączonego do zestawu SDK, za pomocą następującego polecenia:

javah Przykład1

Powinny zostać zwrócone następujące dane wyjściowe:

Krok 4: Pisanie kodu natywnego

Tutaj napiszemy kod w C/C++. Należy zanotować wszystkie podpisy, które muszą przypominać deklaracje, które złożyliśmy w kroku 1.

Poniżej znajduje się implementacja napisana w języku C:

Krok 5: Utwórz bibliotekę współdzieloną

Bibliotekę współdzieloną można utworzyć za pomocą dowolnego kompilatora. Ponieważ biblioteka współdzielona zawiera kod natywny, będziemy musieli go utworzyć.

Krok 6: Uruchom swój program

Ten krok obejmuje ocenę kodu i identyfikację wszelkich problemów z programem. Będzie to dotyczyło środowiska wykonawczego Java, ponieważ kod będzie wykonywany głównie w JVM.

Wydaj następujące polecenie:

Java Przykład1

Powinien zwrócić:

To był nasz krótki przewodnik dla początkujących dotyczący korzystania z Java Native Interface. Mamy nadzieję, że okazał się pomocny.

Nauka pracy z JNI jest niezbędna dla każdego, kto chce tworzyć aplikacje Java, zwłaszcza aplikacje na Androida na smartfony.