自己建了一个工程,用NDK打了个so包,按照网上的说法做的,并且在第一个工程可以用到so里面的方法。
现在创建第二个工程想引用这个写好的so包里面的方法。
用public native String stringFromJNI(); static {
System.loadLibrary("Myjni");
Log.i("loadlivrarty","over");
}时,so库能加载成功,但是找不到stringFromJNI()方法。
报错信息:
INFO/loadlivrarty(909): over
ERROR/AndroidRuntime(909): java.lang.UnsatisfiedLinkError: stringFromJNI
求解决办法,怎样能在工程中引入第三方的so包,并且顺利调用里面的方法?希望高手赐教。
现在创建第二个工程想引用这个写好的so包里面的方法。
用public native String stringFromJNI(); static {
System.loadLibrary("Myjni");
Log.i("loadlivrarty","over");
}时,so库能加载成功,但是找不到stringFromJNI()方法。
报错信息:
INFO/loadlivrarty(909): over
ERROR/AndroidRuntime(909): java.lang.UnsatisfiedLinkError: stringFromJNI
求解决办法,怎样能在工程中引入第三方的so包,并且顺利调用里面的方法?希望高手赐教。
例如你在so库中定义的native方法为:
jstring
Java_com_example_test_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
则你需要定义一个HelloJni的类,包名为com.example.test.hellojni,然后在HelloJni类中定义native方法tringFromJNI。这样都会找到相应的函数。
如果你希望so库中的方法跟包/类名不相关,好像需要自己重写NDK的一些方法的,,,
我的理解是
比如如果是这样的xxx_xxx_xxx_stringFromJNI()
那么你的JAVA工程里,应该有xxx_xxx这个Packeage,Packeage中有xxx这个类,类中调用