如何编写本机方法?

时间:2012-03-09 08:15:30

标签: android android-ndk java-native-interface

现在我有一个.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);
}

但我不知道如何编写本机函数。有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先,您的本机功能必须具有特定名称。例如,如果您在声明本机方法的com.android.test包中有一个类MyActivity,则必须将相应的本机函数命名为:

Java_com_android_test_MyActivity_functionName();

接下来,本机函数必须接收两个未明确定义的附加参数(它们由Java环境发送)。我可以在这里解释一下,但如果您阅读JNI,这可能是最简单的。以维基百科为例:

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

NDK附带的一些样本可以帮助您。