Android源码中编译自己的so库(3)

#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库。

至此完成,编译运行即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7f53d121ae58291036d1064fa17b283d.html