似乎JNI方法需要使用内置的Java类签名编写。我想调用一个我没写过的JNI方法。我可以在一个不是用我的课程编写的库中调用本机方法吗?
答案 0 :(得分:2)
假设:
package com.mycompany.package
class MyClass
{
public native void doSomething();
}
被转换(修改)为本机链接的方法名称:
Java_com_mycompany_package_MyClass_doSomething
似乎您需要在同一个包中使用相同的类才能将本机方法连接到Java方法。如果您无法控制本机库,这似乎可能会出现问题和/或出错。将代码打包到外包中是一个坏主意,尤其是。如果外国包裹签字并盖章。
同样有问题的是,本机调用通常会有一些您可能违反的特定注意事项 - 例如线程安全问题,或释放内存或锁定(需要调用您正在使用的其他本机函数)。
根据我(JNI)的经验,我不推荐它,除非你绝望,没有其他选择,而且你真的很熟悉目标系统和API。
您最好的选择是围绕您要使用的目标O / S API编写一个简单的本机包装。