Java Native Interface (JNI)Jak importować dll do projektu Android Java (pracuje z zaćmienia)
Java Native Interface (JNI) jest jednym z intersting interfejsu przez Java od wykorzystaniem Java Native Interface (JNI) możesz pracować z innymi aplikacjami i bibliotekami.
JNI to macierzysty interfejs programowania dla języka Java, który jest częścią pakietu JDK. Używając JNI możesz operować z innymi aplikacjami i bibliotekami napisanymi w innych językach, takich jak C, C++. Ale podstawowe pytanie pojawia się, kiedy powinienem używać JNI?
- Chcesz jakiś specyficzny platformą informacyjną i średnia klasa biblioteki Java może nie obsługiwać funkcje zależne od platformy potrzebnych aplikacji.
- Masz pewną aplikację biblioteczną napisaną w innym języku i chcesz jej użyć w aplikacji java.
- Chcesz, aby Java współpracowała z jakimś niskim poziomem programowania.
Poniżej przedstawiono prosty przykład; Zobacz, że metody mają „native” Słowo kluczowe:
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
DLL będziemy używać jest firstJNI.DLL Ten DLL mogą być generowane przez VC++ czy Borland. Które omówimy później.
//firstJNI.java
class firstJNI
{
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
static {
System.loadLibrary("firstJNI");//This is firstJNI.DLL
/*if generated by borland
System.loadLibrary("firstjni");//This is firstjni.dll
*/
}
public static void main(String[] args)
{
firstJNI JN=new firstJNI();
JN.displayHelloWorld();
JN.displayOther();
String input = JN.getLine("Enter Some Thing ");
System.out.println("You Entered " + input);
}
}
Kompilacja powyższy kod korzystając (Co to znaczy?)
prompt>javac firstJNI.java
Następnie należy utworzyć nagłówek pliku przy użyciu (Co to znaczy?)
prompt>javah javah -jni HelloWorld
ten utworzy plik firstJNI.h. W pliku nagłówkowym widać
-------------------------------------
JNIEXPORT void JNICALL Java_firstJNI_displayHelloWorld
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: displayOther
* Signature:()V
*/
JNIEXPORT void JNICALL Java_firstJNI_displayOther
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_firstJNI_getLine
(JNIEnv *, jobject, jstring);
----------------------------------------------
Nie edytować nagłówek pliku
Teraz patrz jak generować DLL przy użyciu VC++, kliknij: File-> New-> Win32Dynamic-Link Library Give nazwę i wybierz prosty projekt DLL Trzeba będzie firstJNI.CPP złożyć Poniżej znajduje się dany plik firstJNI.cpp
// MYVCDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "D:\Kanad\Study\codeToad Articles\firstJNI.h"
#include "jni.h" //can copy or give full path
#include <math.h>
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" __declspec(dllexport) int getMemorySize();
//And your function definition should look like this:
extern "C" __declspec(dllexport) int getMemorySize()
{ //do something
MEMORYSTATUS memoryStatus;
int MB=1024*1024 ;
double memSize;
memoryStatus.dwLength=sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
__int64 size= memoryStatus.dwTotalPhys;
memSize=(double)size/MB;
printf("\nTotal Memory %.0lf MB",ceil(memSize));
return 0;
}
JNIEXPORT void JNICALL
Java_firstJNI_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL\n");
}
JNIEXPORT void JNICALL
Java_firstJNI_displayOther(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL Other Function \n");
getMemorySize();
}
JNIEXPORT jstring JNICALL
Java_firstJNI_getLine(JNIEnv *env, jobject obj, jstring enter)
{
char buf[128];
const char *str = env->GetStringUTFChars(enter, 0);
printf("\n%s", str);
env->ReleaseStringUTFChars(enter, str);
scanf("%s", buf);
return env->NewStringUTF(buf);
}
Mam teraz pytania dotyczące sposobu użycia pliku .dll napisanego w C++/C w mojej aplikacji java. Zajmuję się tworzeniem aplikacji dla Androida za pomocą Eclipse i mam pewne pliki DLL, a ja nie mają ich źródła ... Jak mogę używać ich w moim projekcie?
Więc udało się dodać dll w swoim rodzimym Android projektu? Trochę utknąłem w tym, spójrz tutaj http: // stackoverflow.com/questions/28393305/using-dll-library-in-android-application –