jni学习总结

第一步:定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的

public native String helloFromC();

第二步:实现C代码

1、在dos命令下进入到工程中src文件夹所在的目录下,我的工程在E盘中的object->android->AliWangWang->src

2、使用javah命令,在javah后写上c方法接口所在类的全类名,按enter回车编译

3、编译过后,刷新工程可以看到工程中多了一个文件

4、在工程中新建文件夹jni,并将刚才生成的.h文件放到jni文件夹下

5、实现C语言代码,打开刚才生成的.h文件,可以看到为我们编译好的方法,这个方法也可以自己写,但是为了方便和正确通过上述方法实现

JNIEXPORT jint JNICALL Java_com_ivan_aliwangwang_MainActivity_login
  (JNIEnv *, jobject, jstring);

6、将.h文件中的方法拷贝到hello.c下开始编写c代码

#include <stdio.h>
#include "com_example_helloworldformc_MainActivity.h";  // 引入ndk环境里面的头文件 需要用<> 引用代码中的头文件 ""

//public native String helloWorldFromC(){}
jstring Java_com_example_helloworldformc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj){// 返回一个java String 类型的字符串
    //jstring     (*NewStringUTF)(JNIEnv*, const char*);
    //(*env) 相当于 JNINativeInterface* JNIEnv
    //*(*env)  相当于 JNINativeInterface
    ///return (**env).NewStringUTF(env,"helloworldfromc");

    return  (*env)->NewStringUTF(env,"helloworldfromc");


    
}

第三步:在jni目录下创建Android.mk文件

 LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
    #对应打包成函数库的名字
   LOCAL_MODULE    := libhello  
   #对应的C代码的文件
   LOCAL_SRC_FILES := Hello.c

   include $(BUILD_SHARED_LIBRARY)

第四步: 把c代码 打包成函数库

1、在dos命令中,进入到工程所在的目录,如上述所示

 2、输入nkd-build,前提是已经做好了环境变量的配置,如图所示表示编译成功

3、在eclipse中刷新工程目录可以看到

第五步:在java代码中引入库函数

    //在java代码中引入函数库
    static{
        System.loadLibrary("hello");//注意  去掉前面的lib和后面的.so即可
    }
    

第六步:在android中调用该方法即可,这里是在按钮的点击事件中直接调用了该方法,并弹出一句话

    public void click(View view){
        // 将方法引入到函数库中后就可以直接调用这个方法
        Toast.makeText(getApplicationContext(), hellofromc(), 0).show();
    }
原文地址:https://www.cnblogs.com/ltolstar/p/5452848.html