一、 使用Android Studio 2.2 编译.so文件 (若已有编译好的.so文件继续下一步)


首先新建工程,使用CMake进行JNI编程,具体操作见下面的链接,工程相关内容如下图所示。


Android Studio 2.0+ 使用CMake编程:


1,、定义native方法






android源码动态链接设备线程 安卓调用动态库_.jar



2.编写.cpp文件





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_02



3、调用JNI检验native方法是否通过





android源码动态链接设备线程 安卓调用动态库_androidstudio2.2_03



4、运行效果





android源码动态链接设备线程 安卓调用动态库_androidstudio2.2_04



二、 新建Module,导入.so文件


1、右击工程目录app新建Module





android源码动态链接设备线程 安卓调用动态库_gradle_05



2、选择Android Library,然后next,操作如下





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_06



保证包名和.so文件原包名一致,否则无法调用,然后Finish。





android源码动态链接设备线程 安卓调用动态库_.so_07



4、在以后的运行或者修改配置过程中,有时会提醒如下图这样的错误,虽然不知道是什么原因,只要按路径提示在工程中删掉报错文件,然后Make一下就好了。




android源码动态链接设备线程 安卓调用动态库_.jar_08



类名和类的路径必须和.so 文件原类名和路径一致,否则无法调用。也可以将原来的类直接复制过来,总之要保证类名和方法名与.so库一致。





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_09



6、在新建Module目录中新建jniLibs文件夹,和正常工程调用.so动态链接库一样,只不过是在新建Module目录中,在本工程中路径为“JNItoJarApplication\jnitojarapplication2\src\main\jniLibs”,并将.so文件的文件夹都拷入jniLibs文件夹下,如下图所示。





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_10



二、 配置新建Moudle的build.gradle文件,生成jar文件


1、由于新建的Moudle需要调用jniLibs下的文件,因此要在build.gradle(Module: jnitojarapplication2)中添加配置,代码及添加效果如下。


sourceSets.main.jniLibs.srcDirs = [ 'jniLibs']





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_11



2、继续配置build.gradle(Module: jnitojarapplication2)文件,指定包名,并配置生成文件目录


在最下面添加如下代码,效果如下图。


type: Copy) {


'build/intermediates/bundles/release/') // 要生成的 .jar 文件来源


into( 'build/libs/') //jar 包的生成路径


include( 'classes.jar')


'classes.jar', 'jnitest.jar') // 命名包为 “jnitest” ,名称可以自己定


}



type: Delete) {


'build/outputs/jnitest.jar' //“jnitest.jar” 为要生成的包名和后缀,这一句的意思是:如果包已经存在,则删除掉


}



exportJar.dependsOn(deleteOldJar, build)






android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_12



3、生成jar文件


点击工程中右侧的”Gradle“按钮,按下图中的路径找到”exportJar“一项,然后双击,等待生成jar文件





android源码动态链接设备线程 安卓调用动态库_android源码动态链接设备线程_13



4、生成成功后在Moudle工程目录build\libs中找到生成的名为jnitest.jar的包。





android源码动态链接设备线程 安卓调用动态库_gradle_14





至此jar包的生成就完成了,下面是调用。



三、 任意工程通过jar包调用.so动态链接库中的方法


1、新建任意工程或者现有任意工程都可以,下面新建任意工程,工程名为MyJNItest。





android源码动态链接设备线程 安卓调用动态库_androidstudio2.2_15



2、将之前生成的jar文件拷到工程“app\libs”目录下,然后添加依赖,具体就不详细说了,效果如下图。





android源码动态链接设备线程 安卓调用动态库_.jar_16



3、在工程目录中,“app\src\main”目录下新建“jniLibs”文件,并将所有.so文件文件夹拷入“jniLibs”中,具体操作同上面的操作,效果如图。





android源码动态链接设备线程 安卓调用动态库_.jar_17



4、在工程中调用验证效果,代码如下。





android源码动态链接设备线程 安卓调用动态库_.so_18



5、运行效果



android源码动态链接设备线程 安卓调用动态库_gradle_19




到此包的生成和调用就完成了。