准备工作:
确保eclipse正确配置了ndk开发环境;
第一步、新建一个安卓项目
第二步、添加一个ndk支持
第三步、在确认系统配置了ndk的环境变量情况下引入jni支持;
第四步、在jni文件夹下创建(.c、.h、Android.mk、Application.mk)等文件;
1、Application.mk文件解析
====== Application.mk ============
#默认,不做修改;
APP_CFLAGS += -fexceptions
#默认,不做修改;
APP_STL := gnustl_static
#应用程序平台
APP_PLATFORM := android-19
#APP_ABI := all 表示编译全平台的;
#APP_ABI := armeabi,mips,x86 表示编译armeabi, mips和x86三个平台的;
APP_ABI := armeabi armeabi-v7a
2、Android.mk文件解析
====== Android.mk ============
#这个mk文件标识了两个模块,一个是共享库so文件,一个是bin文件
#第一个模块编译的是共享的so库
# 这个基本上就是个固定的格式了,放在 Android.mk的一个个有效行,表示本文件的路径。
LOCAL_PATH := $(call my-dir)
#清除之前定义的 LOCAL_XXX 变量,通常每个模块都要写一次。
include $(CLEAR_VARS)
# 模块名,本例中 LOCAL_MODULE := util ,生成的共享库文件 libutil.so
LOCAL_MODULE := util
# 模块中的源文件列表
LOCAL_SRC_FILES := UninstalledObserver.c kesyPrint.c
# 预先定义的宏定义,预编译时使用到。这里定义了 KE_DEBUG 宏
#KE_DEBUG :print log when it is defined
LOCAL_CFLAGS += -DKE_DEBUG
# 引用的链接库,和linux命令行一样, -L后接寻找库的目录, -l后接库的名称,本例中是log
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
# BUILD_SHARED_LIBRARY表示编译的是so共享库
# BUILD_STATIC_LIBRARY 编译静态库
# BUILD_EXECUTABLE 编译可执行文件
include $(BUILD_SHARED_LIBRARY)
2.h文件:.c文件里用到的方法(类似java里的接口定义)和结构体(类似java里的实体类)的定义;
第五步、右键运行安卓项目BuildProject,程序会自动在lib下生成你需要的SO;