我想你还没有通过JNI加载原生库到Java的概念。
首先在java中定义本地方法并在本机中执行相应的实现并编译它(您必须按照命名约定注册本地方法1)2)在jni_onload中注册本地方法...我认为你一定已经这样做了,如果没有检查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库,independent_lib.so,next_dependent_lib1.so ..... .... ..
}
如果混杂起来,VM将不能够链接库并抛出一个不满意的链接错误。
最后,所有这些.so都将成为你的apk文件的一部分,并且它只会被运行到系统库。除非它的电话根本不能提取.so。如果您按照上述方法,则不需要将任何.so添加到系统中。只有建立在日食/ Cygwin和运行
希望这有助于
问候, Shrish