froyo的代码中mediaplayer模块mediaplayer.java中试这样是这样调用C++库的:
static {
System.loadLibrary("media_jni");
native_init();
}
这个很好理解,但是Surface.java中:
native private static void nativeClassInit();
static { nativeClassInit(); }只是调用了初始化的函数,它不需要loadLibrary吗?
还有SurfaceSession.java里面初始化的方法都没有,请问他们是怎么找到C++库的, 还是android有他自己的机制,求教,谢谢
static {
System.loadLibrary("media_jni");
native_init();
}
这个很好理解,但是Surface.java中:
native private static void nativeClassInit();
static { nativeClassInit(); }只是调用了初始化的函数,它不需要loadLibrary吗?
还有SurfaceSession.java里面初始化的方法都没有,请问他们是怎么找到C++库的, 还是android有他自己的机制,求教,谢谢
但是这样以为只正确了其一部分.
还有一部分是如果System.loadLibrary本地方法相对应的动态库文件,那么下次就无需再System.loadLibrary了.
例如:native private static void nativeClassInit();
static { nativeClassInit(); }
这个要地代码在调用之前.相对应的库就已经System.loadLibrary过了.只要没有卸载,就一直处于库装载状态.而什么时候System.loadLibrary相对的库的,我不晓得,不过可以肯定,相对应的库一定在调用static { nativeClassInit(); }前被装载了,或系统装载的也或是ANDROID框架启动装载的还或是你的程序装载启动的.至于具体什么时间装载的,反正它是提前装载了.
希望对你有所帮助.
system.loadLibrary("libName")
声明JNI的接口,以及直接将so载入