【发布时间】:2015-08-18 15:15:17
【问题描述】:
我正在尝试使用 JNI 做一些事情,结果发现了以下问题:
如果我想在 Java 中使用本机函数,我会通过
加载存储所需函数的所需库static{
System.loadLibrary("lib");
}
并使用
native private static int calculate(byte[] numberArray);
在java文件中声明本地方法。在程序本身中,我可以使用这个函数来计算一些东西:
int result = calculate(array);
这只有在我使用 javah 创建的头文件编译共享对象时才有效,以便每个函数在 c 端命名为:
static void Java_com_packagename_File_calculate(const void* array, void* result){
code[...]
}
如果我删除 java 代码中对这个 c 函数的引用(“native [...] calculate[...]”);是否有可能通过java访问/执行仍然存在的c代码(当然不编辑现有文件;-)),例如通过反射或继承?或者有什么可能的:
public class NewClass{
public int nativeCheater(){
System.loadLibrary("lib");
native private static int Java_com_packagename_File_calculate;
}
}
重要的是,我想使用一个与之前使用的包 com.packagename.(File) 没有任何关系的全新类。
提前致谢:-)
【问题讨论】:
标签: java reflection android-ndk java-native-interface native-code