2012-03-09 64 views
1

現在我得到了一個.so文件和一個C++頭文件。 有一個函數如下:如何編寫本機方法?

BOOL __stdcall HK_STD_CreateHandle(IN PBYTE pFileHdrBuffer, IN DWORD dwFileHdrSize, IN DWORD dwBufferSize, OUT HANDLE& hHandle); 
typedef BYTE *  PBYTE; 
typedef unsigned long DWORD; 
typedef void * HANDLE; 

我想我可以實現一個Java類使用.so文件:

public class Decoder { 
    static { 
     System.loadLibrary("SingleDecode"); 
    } 

    public native boolean HK_STD_CreateHandle(
     byte[] pFileHdrBuffer, 
     int dwFileHdrSize, 
     int dwBufferSize, 
     int hHandle); 
} 

但我不知道怎麼寫本機的功能。有誰能夠幫助我?

+0

你在做什麼?你是否從你的JNI文件中獲得.so文件 – 2012-03-09 10:33:50

+0

是否編譯過android NDK – 2012-03-09 10:38:01

+0

謝謝,我想使用第三方.so文件。我想我可以直接使用它(只需在Java中聲明一個本地方法),但是現在我知道我必須使用ndk實現一個新的.so文件才能使用第三方.so文件。 – 2012-03-12 06:02:08

回答

0

首先你的本地功能必須有一定的名字。舉例來說,如果你有在你聲明的本地方法的封裝com.android.test類MyActivity,相應的本地函數必須命名爲:

Java_com_android_test_MyActivity_functionName(); 

接下來,本地功能必須接收兩個額外的參數這些不是由你明確定義的(它們是由Java環境發送的)。我可以在這裏解釋它,但如果你閱讀JNI,這可能是最簡單的。維基百科的嘗試,例如:

http://en.wikipedia.org/wiki/Java_Native_Interface

也有自帶的NDK幾樣,這將幫助你。