这里只记录所有关键地方的配置:
首先在main目录下创建jni和jniLibs文件夹,在Java里编写调用so库的代码,声明native方法,这时在nativa方法上Alt/Enter,会有创建native方法的选项,这时在jni目录下会有相应的c文件,如果没有创建native方法的选项,这时就要点击bulid下的make project来编译工程,成功后会在
目录下面生成所有的class文件,这时在Android studio自带的Terminal中使用javah命令来生成c头文件,使用命令的格式如下:
要注意的是:一定要在debug目录下面使用javah命令;然后是包名点类名的方式,注意不要带.class,执行成功后就会在jni下生成对应的头文件,然后在c文件中引用头文件,实现native方法。
在app目录下的build.gradle配置:
ndk中的第一行是C文件中要引用so库,声明绝对路径,中间三行就不多讲了,最后一行是引用gnustl_static,是实现C++编译环境,当然还有其它一些参数,可以百度。
根目录下的gradle.properties文件添加一句代码:
android.useDeprecatedNdk=true
最后还有一个特别要注意的地方,就是一定要在C文件中声明一下native方法,否则生成so库后在Java中调用时,会报找不到native方法的错误,如果你是引用了生成的头文件,那么不用声明,因为头文件里就有声明,切记。
好了,到了这步就直接make工程,会在
ndk目录下生成我们要的so库,把armeabi-v7a复制到jniLibs目录下,整个工程就成功了。