我想你还没有通过 JNI 将原生库加载到 Java 的概念。
首先,您在 java 中定义本地方法并在本地执行相应的实现并编译它(您必须按照命名约定注册本地方法 1) 2)在 jni_onload 中注册本地方法...i认为你必须这样做,如果没有检查http://www.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html)
接下来,您必须先加载库,然后才能对本机进行任何调用。这必须做一次。您可以在活动中通过定义:
静态{
System.loadLibrary("mylib.so");
}
注意在编译库时你会得到库名 libXYZ.so,但是在 java 中加载库时,“lib”应该省略,只需 system.loadlibrary(XYZ.so)
如果您使用的是 NDK,则该库已被复制到 Java 项目 > libs > armeabi 文件夹,否则您必须复制您的 lib.so 那里
现在如果你有多个共享库,你应该首先加载依赖最少的 lib.so,然后是第二个等等,即
静态{
System.loadLibrary(independent_lib.so); // 应该只依赖于 android 库
System.loadLibrary(next_dependent_lib1.so); //可以依赖android库和independent_lib.so
System.loadLibrary(next_dependent_lib2.so); //可以依赖android libs,independent_lib.so,next_dependent_lib1.so
......
……
..
}
如果你搞砸了,VM 将无法链接库并抛出 unsatisfied link 错误。
最后,所有这些 .so 将成为您的 apk 的一部分,并将被推送到系统库仅运行时。除非它是有根手机,否则您无法提取 .so。如果您遵循上述方法,则无需将任何 .so 推送到系统。仅在 eclipse/cygwin 上构建并运行
希望这会有所帮助,
问候,
虾肉