多语言展示
当前在线:392今日阅读:103今日分享:49

一分钟学会Android.mk

在编写Jni代码,需要接触到c/c++代码,所以要了解它是如何编译的,这里简单介绍一下Android.mk是如何编译生成jni代码的,以eclipse为例子介绍一下
工具/原料
1

电脑

2

eclipse 、android studio

方法/步骤
1

1、Android.mk的作用它是告诉ndk将jni代码编译生成动态库的一个编译脚本,基本上写jni代码是少不了一个Android.mk文件的

2

2、主要的android jni项目目录结构如下图所示

3

3、写一个最简单的Android.mk,如下图所示#保存当前目录的宏LOCAL_PATH := $(call my-dir)  #清除全局宏定义的值include $(CLEAR_VARS)#生成的库的名称LOCAL_MODULE := othermodule#库编译需要的源码文件和依赖库LOCAL_SRC_FILES := lib/libothermodule-57.so#告诉Ndk编译成动态库include $(PREBUILT_SHARED_LIBRARY)

4

4、来一个复杂一点的#保存当前目录的宏LOCAL_PATH := $(call my-dir)  #清除全局宏定义的值include $(CLEAR_VARS)#生成的库的名称LOCAL_MODULE := othermodule#库编译需要的源码文件和依赖库LOCAL_SRC_FILES := lib/libothermodule-57.so#告诉Ndk编译成动态库include $(PREBUILT_SHARED_LIBRARY)#清除全局宏定义的值include $(CLEAR_VARS)#是否允许未定义的符号LOCAL_ALLOW_UNDEFINED_SYMBOLS=false#生成的库的名称LOCAL_MODULE := jnidemo#生成的库的所用的头文件所在的目录LOCAL_C_INCLUDES := $(LOCAL_PATH)/include#ndk编译c代码用到的一些宏定义LOCAL_CFLAGS := -D_LINUX -D_ANDROID   #ndk编译c++代码用到的一些宏定义LOCAL_CPPFLAGS := -D_LINUX -D_ANDROID#ndk编译当前目录下所有的c文件MY_C_LIST += $(wildcard $(LOCAL_PATH)/*.c)#ndk编译当前目录下所有的c++文件MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/*.cpp)#所有的c、c++文件LOCAL_SRC_FILES := $(MY_C_LIST:$(LOCAL_PATH)/%=%)LOCAL_SRC_FILES +=  $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)#依赖的第三方库LOCAL_SHARED_LIBRARIES :=  othermodule#依赖的系统库LOCAL_LDLIBS  := -landroid -pthread -llog -lz#告诉Ndk编译成动态库include $(BUILD_SHARED_LIBRARY)#递归调用子目录的.mkinclude $(call all-makefiles-under,$(LOCAL_PATH))include $(call all-subdir-makefiles)#用于在运行期检测目标设备的CPU家族和它支持的可选特性。$(call import-module,cpufeatures)

5

5 、简单说明一下我的编译环境,主要是Ndk的c、c++编译环境的配置,我用的是MINGGW

注意事项

仅供学习参考

推荐信息