很多时候我们开发会使用到第三方的.so文件,这个.so文件是如何生成的呢?当然和NDK有关了,其实NDK开发的一般步骤很简单,只需简单的几步就可完成。
一、和使用JDK开发一样,想要使用NDK开发,首先必须得下载NDK
studio里面可以直接下载ndk
下载好了之后在你的local.properties路径配置中自动会加上NDK路径(与SDK的添加路径一样)
二、在gradle.properties的配置中添加
android.useDeprecatedNdk=true //允许使用过时的NDK
这是解决ndk版本低不能自动编译jni的问题
三、在build.gradle配置中添加
四、生成.so文件
1、编写java类和native方法
2、点击Build—>Make Project,生成class文件(在app—>build—>intermediates—>classes—>debug目录下)
3、在studio底下菜单中的Terminal命令行中通过javah命令生成.h头文件
注意:路径只能切换到cd debug目录,不能直接将目录切到项目里面,比如cd xxx/org/hugh/jni,不行!
此时,debug目录下会生成.h文件
4、将.h头文件剪切到新建的jni目录中,在jni目录中新建一个.c或者.cpp文件,生成.so库
新建jni目录
将之前生成的.h文件剪切到jni目录中
在jni目录中新建一个.c或者.cpp文件
点击Build—>Make Project进行编译,生成.so库文件(路径:app—>build—>intermediates—>ndk—>debug—>lib下)
可以将这些.so文件拷贝出来
将含有JniUtil.java的jar拷贝出来,可以给classes.jar重命名(这里也可以通过gradle的task来执行)
五、在新建项目中使用.so文件
将生成的.so文件和调用so方法的jar包复制到新项目的lib文件夹中
gradle中配置so库的存放位置
这样就可以调用了
运行结果
一般调用.so文件的类都会打包成jar包提供出来(比如调用.so文件的JniUtil类),这是因为.so文件中的方法是严格按照包名及类名来命名的。