我在做android加载ndk提供的so,在写jni文件的时候,有一个疑问。
jni函数的命名 Native的对应函数名要以“Java_”开头,后面依次跟上Java的“package名”、“class名”、“函数名”,中间以下划线“_” 分割,
问题来了,为什么要加上类名了。
比如说:
jstring
Java_com_example_jintest_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
申明了函数stringFromJNI,那我只能够在MainActivity这个类文件中可以调用,要是我新建了一个类aa.class,
这个时候我申明本地方法public native String stringFromJNI();
则无法找到这个函数。
请问各位大虾有办法吗?
如果是这样,那如果第3方给我一个编译好的so文件,那我不是没办法调用了?ndkjninative
jni函数的命名 Native的对应函数名要以“Java_”开头,后面依次跟上Java的“package名”、“class名”、“函数名”,中间以下划线“_” 分割,
问题来了,为什么要加上类名了。
比如说:
jstring
Java_com_example_jintest_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
申明了函数stringFromJNI,那我只能够在MainActivity这个类文件中可以调用,要是我新建了一个类aa.class,
这个时候我申明本地方法public native String stringFromJNI();
则无法找到这个函数。
请问各位大虾有办法吗?
如果是这样,那如果第3方给我一个编译好的so文件,那我不是没办法调用了?ndkjninative
public static void fun(){
stringFromJNI();
}
这样其他的类也可以调用这个接口了。
jint JNI_OnLoad(JavaVM* vm, void* reserved)
在這個函數自己編寫註冊需要的函數就可以了。源碼中的例子太多了,你查一下就可以
这个名字一般是用下面的工具生成的,不用自己写
jdk/bin/javah.exe