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或者换一个名字

 

posted on 2018-03-28 08:58  maogefff  阅读(237)  评论(0编辑  收藏  举报

导航