美文网首页
JNI开发笔记一

JNI开发笔记一

作者: BlainPeng | 来源:发表于2016-01-28 21:58 被阅读111次
    1、创建一个类,在类里面声明一个本地方法
    public class JNIUtils { 
        //在c语言中对两个数求和   
        public static native int getNumSum(int a ,int b);
    }
    

    2、设置ndk的路径和.so的名称

    • 点击File->ProjectStructure,配置好ndk的路径(最好是先把ndk下载到本地)如下图:
    ndk_config.png
    • 在模块的目录下找到build.gradle文件,将以下部分

      ndk{  
              //.so的名称:testjni  
              moduleName"testjni" 
              //适配了三种平台,一般armeabi平台比较多,可以只写一种   
              abiFilters"armeabi","armeabi-v7a","x86"
      }
      

    添加到defaultConfig大括号内

    • 在grade.properties文件内的末尾处添加一句代码,不然studio会报错

      android.useDeprecatedNdk=true
      

    3、生成头文件

    • 先点击Build->Make Project,再打开模块目录下的build文件夹,会生成一个文件夹classes,点击打开,找到一个debug的文件夹

    • 打开studio的Terminal,先进入到debug文件夹中,输入:

      cd app/build/intermediates/classes/debug
      
    • 再输入:

      //javah -jni 类的全名
      javah -jni com.blainpeng.jnidemo.JNIUtils
      

    此时会在debug文件下生成一个.h文件

    4、java层开始调用c/cpp中的函数

    • 在main目录下新建一个名为jni的文件夹,然后jni目录下新建一个.c或.cpp文件,将上面生成的.h文件中的方法剪切到jni目录下,并且在.c/.cpp里面include该头文件

      #include "com_blainpeng_jnidemo_JNIUtils.h"
      //c中求和的方法 
      int sum(int a, int b){    
              return a+b;
      }
      JNIEXPORT jint JNICALL Java_com_blainpeng_jnidemo_JNIUtils_getNumSum        
      (JNIEnv *env, jclass clazz, jint ja, jint jb){    
            return sum(ja,jb);
      }
      
    • 写完逻辑后,再rebuild一次,再次点击build->intermediates,找到一个ndk的文件夹,点击它,查看是否有生成.so文件

    • 在android代码中调用本地方法,需先加载so文件,可以通过静态代码块的方式来加载

        static {    
                    System.loadLibrary("testjni");
         }
      
    • 再调用本地方法:

        int numSum = JNIUtils.getNumSum(4, 9);
      

    得到结果:

    result.png

    好了,JNI的简单入门就结束了。

    相关文章

      网友评论

          本文标题:JNI开发笔记一

          本文链接:https://www.haomeiwen.com/subject/bldihttx.html