static {
System.loadLibrary("stbmonitor_jni");
native_init();//调用native_init函数
System.loadLibrary("stbmonitor_jni");
native_init();//调用native_init函数
}
在静态代码块内通过System.loadLibrary加载。
加载JNI库
前面说过,如果Java要调用native函数,就必须通过一个位于JNI层的动态库来实现。顾名思义,动态库就是运行时加载的库,那么在什么时候以及什么地方加载这个库呢?
这个问题没有标准答案,原则上是:在调用native函数前,任何时候、任何地方加载都可以。通行的做法是在类的static语句中加载,调用System.loadLibrary方法就可以了。这一点在上面的代码中也见到了,我们以后就按这种方法编写代码即可。另外,System.loadLibrary函数的参数是动态库的名字,即media_jni。系统会自动根据不同的平台拓展成真实的动态库文件名,例如在Linux系统上会拓展成libmedia_jni.so,而在Windows平台上则会拓展成media_jni.dll。