(一) Android.mk 编译多个目标文件 编译多个模块 编译动态库 编译静态库

本文介绍了 Android.mk 的基本用法及配置技巧,包括如何指定编译类型(如可执行文件、动态库、静态库等),如何指定源文件路径及模块路径,并提供了常见错误解决方法。

Android.mk      可以编译成   

                 | --  可执行文件

                 | --  动态库

                 | --  静态库

                 | --  jar包

                 | --  apk


  最简单的Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)           //清除变量

LOCAL_MODULE := samples         //生成目标模块 

LOCAL_SRC_FILES := xxx          //目标文件 

include $(BUILD_EXECUTABLE)     //生成目标格式

  分析:

       LOCAL_PATH:= $(call my-dir)         my-dir     路径:AOSP/build/core/definitions.mk     定义模块相对路径

 

Android 构建配置中,使用 Android.mk 文件可以定义多个模块,并且分别指定它们的编译类型,例如共享库(.so)或可执行文件Android.mk 文件基于 GNU Make 语法,通过多次定义模块并使用不同的构建规则,可以实现多模块的并行编译。 每个模块的定义通常包括模块名称、源文件编译选项以及目标输出类型。在同Android.mk 文件中,可以通过多次使用 `include $(CLEAR_VARS)` 来重置变量,从而定义多个独立的模块。 以下是个示例 Android.mk 配置,用于同时编译个共享库和个可执行文件: ```makefile # 定义当前路径 LOCAL_PATH := $(call my-dir) # 第模块:共享库 include $(CLEAR_VARS) LOCAL_MODULE := my_shared_library LOCAL_SRC_FILES := my_shared_source.c include $(BUILD_SHARED_LIBRARY) # 第二个模块:可执行文件 include $(CLEAR_VARS) LOCAL_MODULE := my_executable LOCAL_SRC_FILES := my_executable_source.c # 可选:添加 PIE 支持(适用于 Android 4.1 及以上) LOCAL_CFLAGS += -pie -fPIE LOCAL_LDFLAGS += -pie -fPIE include $(BUILD_EXECUTABLE) ``` 在这个配置中: - `my_shared_library` 是个共享库模块,最终会生成名为 `libmy_shared_library.so` 的文件。 - `my_executable` 是个可执行文件模块,生成的可执行文件位于目标设备的指定目录中,并且支持 PIE 机制,以确保在现代 Android 系统上正常运行[^4]。 如果需要在可执行文件中链接共享库,则可以在可执行文件模块中添加依赖声明: ```makefile LOCAL_SHARED_LIBRARIES := my_shared_library ``` 这样,构建系统会确保在编译可执行文件之前先编译共享库,并在链接阶段将共享库链接到可执行文件中。 通过这种方式,可以在Android.mk 文件中组织多个模块的构建流程,实现灵活的项目结构管理[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值