#ifndef TOOLS_H
#define TOOLS_H
extern int add(int add1, int add2);
#endif
头文件,声明函数add。
2.2 tools.c代码
#include "tools.h"
int add(int add1, int add2){
return add1 + add2;
}
源码文件,实现了此项目核心功能add。
2.3 jni_call.c代码
#include "tools.h"
#include <jni.h>
jint
Java_com_eton_helloworld_MainActivity_add(JNIEnv* env, jobject this, jint add1, jint add2){
return add(add1, add2);
}
JNI调用接口函数,JAVA层就是通过此代码来调用C/C++中的代码。需要注意的是此函数的命名方式Java_<包路径>_<类名>_<方法名>,以及参数列表等。
2.4 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtools
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := tools.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libjnicall
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := jni_call.c
LOCAL_STATIC_LIBRARIES := libtools
include $(BUILD_SHARED_LIBRARY)
如前所述,编译分为两部分进行,
代码01-06,将tools.h,tools.c编译为二进制静态库(libtools.a文件);
代码07-结尾,将libtools.a及JNI代码编译为.so库。
至此完成,编译运行即可。