一分钟学会Android.mk

2025-10-18 02:20:47

1、Android.mk的作用

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

一分钟学会Android.mk

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

一分钟学会Android.mk

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)

一分钟学会Android.mk

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)

#递归调用子目录的.mk

include $(call all-makefiles-under,$(LOCAL_PATH))

include $(call all-subdir-makefiles)

#用于在运行期检测目标设备的CPU家族和它支持的可选特性。

$(call import-module,cpufeatures)

一分钟学会Android.mk

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

一分钟学会Android.mk

一分钟学会Android.mk

一分钟学会Android.mk

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢