JNI两种注册,System.load()与System.loadLibrary()加载SO库

> System.load()与System.loadLibrary() ,System.loadLibrary()
Android System.loadLibrary及JNI_OnLoad简介 --http://blog.csdn.net/myarrow/article/details/9718677
System.load 和 System.loadLibrary详解-- http://blog.csdn.net/caiwenfeng_for_23/article/details/44960873
Android平台Native开发与JNI机制详解-- http://www.cnblogs.com/misybing/p/4841010.html?tvd

Windows下使用.dll, Linux/Android平台下使用.so。

动态加载so库的实现方法与问题处理- http://blog.csdn.net/aqi00/article/details/72763742

 

  --JNI在加载时,会调用JNI_OnLoad(),而卸载时会调用JNI_UnLoad(),我们可以利用这两个方法来动态方式实现JNI。

> JNI两种注册过程实战- https://blog.csdn.net/xsf50717/article/details/54693802
JNI demo- https://github.com/xsfelvis/JniDemo
Android OS加载JNI Lib的方法有两种:
1.JNI_OnLoad(动态注册) 
2.通过 System.loadLibrary 加载完 JNI 动态库后,紧接着会调用 JNI_OnLoad 的函数。 

构建jni模块工程有3种方式:
1.最古老的方式 (非必要)【不使用gralde+手动生成文件+手动ndk-build】
   手动写 Android.mk、Applicatoin.mk ,然后手动调用ndk-build去生成so包,早期在ADT时代开发常用
2.最前沿的方式 使用gradle-experimental 【使用gradle+全自动生成】 
   这表示使用当前版本 Gradle 插件,继续使用过时的NDK。由于google为NDK开发提供了一个实验性的工具gradle-experimental但截止目前为止最新版本为0.7.3,从版本号上来看目前仍在实验性,而且需要替换project和app的graldebuilde.gradle,需要改写app的gradle,使用model的方式,改动还是比较大的,但是带来了很大方便,可以直接创建对应的h文件,参考文献[2-4]介绍了这种最新的方式
3.折中的方式【使用gradle+手动生成头文件+自动ndk-build】
   这种方便对当前gradle无改变,唯一需要的是手动生成JNI的头文件(也可以通过配置external tool来自动生成[5])就可以。本文就是采取了这种方式来构建自己的Jni,而自动构建ndk-build就是交给了android.useDeprecatedNdk=true,表示使用ndk来build(因为谷歌出了gradle-experimental更推荐这种方式,但是这种方式改动较大、也不稳定)。

你可能感兴趣的:(NDK/JNI/Cmake)