Java Native Interface (JNI)Nasıl (Tutulma ile çalışan) Android java projeye .dll ithal etmek
Java Native Interface (JNI) Java Native Interface kullanılarak By java tarafından Intersting arayüz biridir (JNI'yı) , diğer uygulamalar ve kütüphaneler ile çalışabilir.
JNI, JDK'nın bir parçası olan java için yerel programlama arabirimidir. JNI kullanarak C, C++ gibi diğer dilde yazılmış diğer uygulamalar ve kütüphaneler ile çalışabilirsiniz. Ama temel soru JNI'yi ne zaman kullanmalıyım?
- Bazı platforma özel bilgiler ve standart bir Java sınıfı kütüphanesi uygulama tarafından ihtiyaç duyulan bir platform bağımlı özelliklerini desteklemiyor olabilir istiyoruz.
- Diğer dilde yazılmış bazı kitaplık uygulamanız var ve bunu java uygulamanızda kullanmak istiyorsunuz.
- Java'nın düşük düzeyli bir programlama dili ile etkileşime girmesini istersiniz. Aşağıda
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
++ veya Borland: metotları 'yerli' KeyWord sahip olduğunu görüyoruz. Daha sonra tartışacağız.
//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);
}
}
kullanarak yukarıdaki kodu derlemek
(bu ne anlama geliyor?)
prompt>javac firstJNI.java
Sonra (bu ne anlama geliyor?)
prompt>javah javah -jni HelloWorld
Bu kullanarak başlık dosyası oluşturmak firstJNI.h dosyasını oluşturacak. başlık Dosya göreceksiniz
-------------------------------------
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);
----------------------------------------------
başlık Dosya düzenleme yapmayın
Şimdi tıkla VC++ kullanarak DLL oluşturmak görelim: File-> New-> Win32Dynamic-Linki Kütüphane verin isim ve seç Sen firstJNI.CPP Aşağıda dosyası olacak basit DLL projesi firstJNI.cpp dosyası verilir
// 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);
}
Şimdi java uygulamasında C++/C ile yazılan .dll dosyasını nasıl kullanabileceğim hakkında sorularım var. Ben Eclipse kullanarak android için uygulama geliştiriyorum ve bazı dll dosyaları var ve onların kaynağı yok ... Ben onları projemde kullanabilir miyim ???Bir süre oldu, bu konuda biraz kabataslak değilim -
Yani, yerli android projeye dll dosyaları eklemek başardı? Bu konuda sıkışıp kaldım, buraya http: // stackoverflow bakın.com/questions/28393305/using-dll-kütüphane-in-android-uygulama –