android studio的jni和so
1. android studio自己添加代码生成so
代码地址:https://github.com/maogefff/Android-Test-Sample/tree/master/MyJni
参考资料:https://www.2cto.com/kf/201607/526887.html
http://blog.csdn.net/yanbober/article/details/45310589 (jni用法实例)
注意两点:(不然都生成不了so文件)
1. 名字之间不要有空格
2. 生成的so名字不要跟JAVA类重名
步骤1:修改ndk的路径(其实也可以不修改,使用默认下好的就行)
ndk.dir=E\:\\AndroidStudio\\android-ndk-r14b
步骤2:
android.useDeprecatedNdk=true
步骤3:
ndk{ moduleName "myjniso" //生成的so名字 // abiFilters = ['armeabi'] abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。 }
步骤4:添加一个JAVA类,然后make project;这个时候在中间文件MyJni\app\build\intermediates\classes\debug就会产生相应的类
步骤5:进入中间文件,使用javah,就会在当前文件夹下产生.h文件
F:\test\MyJni\app\build\intermediates\classes\debug>cd F:\test\MyJni\app\build\intermediates\classes\debug
javah com.example.myjni.JniTest
注意:在这一步不一定能成功,我之前这样操作没问题,但是在重装系统以后就不行了,不同版本的JDK的javah有一定的差别:(2017.12.13)
JDK1.8的使用为:
C:\Users\aplex\Desktop\1\Android-Test-Sample\MyJni\app\build\intermediates\classes\debug>javah -classpath . com.example.myjni.JniTest
步骤6: 在源码src下新建立一个jni文件夹,将.h头文件拷贝进去,然后写一个.c文件,去实现.h里面的函数
#include "com_example_myjni_JniTest.h" JNIEXPORT jstring JNICALL Java_com_example_myjni_JniTest_HelloJni (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"HelloJni"); }
步骤7: 编译后生产so文件了
2. 直接使用已经编写好的so文件
接着上面的步骤
步骤1: 删除app下的build目录,然后重启android studio
步骤2:如果是使用别人的so,则自己写一个java类一定要和so文件名对应的上
步骤3:建立jniLibs文件夹,将之前build目录下的so拷贝进来
步骤4:删除gradle下面的ndk生成so或者换一个名字