现在我有一个.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 :(得分:0)
首先,您的本机功能必须具有特定名称。例如,如果您在声明本机方法的com.android.test包中有一个类MyActivity,则必须将相应的本机函数命名为:
Java_com_android_test_MyActivity_functionName();
接下来,本机函数必须接收两个未明确定义的附加参数(它们由Java环境发送)。我可以在这里解释一下,但如果您阅读JNI,这可能是最简单的。以维基百科为例:
http://en.wikipedia.org/wiki/Java_Native_Interface
NDK附带的一些样本可以帮助您。