第一步:定义一个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(); }