JNI/NDK开发指南(2)

1.生成动态库.so,存放于手机的system/lib/中(APP如何将.so存入该目录, 奇怪?????),Java层调用JNI的类会执行静态代码 System.loadLibrary("***")将手机的system/lib目录中的动态库加载到VM。

2..so动态库里,C组件开发者通过 JNI_OnUnload()函数进行初始化。当然,老版的JNI是没有 JNI_OnUnload()函数的,从而VM也能根据有无该函数判断JNI是新版or老版。

3. JNI_OnUnload()函数还能将.so提供的 各个本地函数登记(怎样的登记过程???)到VM里,以便能加快后续呼叫本地函数的效率。

4.正如 在载入.so时会立即呼叫JNI_OnLoad()来进行组件内的初始化;当VM释放该C组件时,也会呼叫JNI_OnUnload()函数来进行善后清除动作。

5.关于 JNIEnv的个人理解:例如多个线程中创建了同一个类的对象,并调用对象的native方法,这时会向 native方法传递一个参数 JNIEnv,表明 native方法方法所运行的环境即该 native方法运行在哪个线程。

你可能感兴趣的:(JNI/NDK开发指南(2))