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;这个时候在中间文件MyJniappuildintermediatesclassesdebug就会产生相应的类

步骤5:进入中间文件,使用javah,就会在当前文件夹下产生.h文件

F:	estMyJniappuildintermediatesclassesdebug>cd F:	estMyJniappuildintermediatesclassesdebug

javah com.example.myjni.JniTest

注意:在这一步不一定能成功,我之前这样操作没问题,但是在重装系统以后就不行了,不同版本的JDK的javah有一定的差别:(2017.12.13)

JDK1.8的使用为:

C:UsersaplexDesktop1Android-Test-SampleMyJniappuildintermediatesclassesdebug>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或者换一个名字

原文地址:https://www.cnblogs.com/maogefff/p/8021795.html