Java Native Interface (JNI)Làm thế nào để nhập khẩu .dll cho dự án java Android (làm việc với nhật thực)
Java Native Interface (JNI) là một trong những giao diện intersting bằng java By sử dụng Java Native Interface (JNI) có thể hoạt động với các ứng dụng khác và thư viện.
JNI là giao diện lập trình gốc cho java là một phần của JDK. Sử dụng JNI bạn có thể hoạt động với các ứng dụng và thư viện khác được viết bằng ngôn ngữ khác như C, C++. Nhưng câu hỏi cơ bản nảy sinh khi tôi nên sử dụng JNI?
- Bạn muốn có một số thông tin cụ thể và nền tảng thư viện lớp Java chuẩn có thể không hỗ trợ các tính năng nền tảng cần thiết phụ thuộc vào ứng dụng của bạn.
- Bạn có một số ứng dụng thư viện được viết bằng ngôn ngữ khác và bạn muốn sử dụng nó trong ứng dụng java của mình.
- Bạn muốn Java tương tác với một số ngôn ngữ lập trình cấp thấp.
Dưới đây được đưa ra ví dụ đơn giản; Xem các phương pháp có KeyWord 'gốc':
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
DLL chúng tôi sẽ sử dụng là firstJNI.DLL DLL này có thể được tạo bởi VC++ hoặc borland. Mà chúng ta sẽ thảo luận sau.
//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);
}
}
Biên dịch mã trên sử dụng (điều này có nghĩa là gì?)
prompt>javac firstJNI.java
Sau đó tạo tiêu đề tệp sử dụng (điều này có nghĩa là gì?)
prompt>javah javah -jni HelloWorld
này sẽ tạo tệp firstJNI.h. Trong File tiêu đề bạn sẽ thấy
-------------------------------------
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);
----------------------------------------------
Không được chỉnh sửa tiêu đề tệp
Bây giờ chúng ta hãy xem làm thế nào để tạo ra DLL sử dụng VC++, Click: File-> New-> Win32Dynamic-Link Library Hãy cho đặt tên và chọn Một dự án DLL đơn giản Bạn sẽ phải nộp firstJNI.CPP Dưới đây được đưa ra file 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);
}
Bây giờ tôi có câu hỏi về cách tôi có thể sử dụng tệp .dll được viết bằng C++/C trong ứng dụng java của tôi. Tôi đang phát triển ứng dụng cho android bằng cách sử dụng Eclipse và tôi có một số tập tin dll và tôi đã không nguồn của họ ... Làm thế nào tôi có thể sử dụng chúng trong dự án của tôi?
Vì vậy, bạn cố gắng thêm các tập tin dll vào dự án Android mẹ đẻ của bạn? Tôi kinda mắc kẹt trong đó, nhìn ở đây http: // stackoverflow.com/questions/28393305/using-dll-library-in-android-application –