Android.mk入门

本文详细介绍了如何使用Android.mk文件来构建Android系统模块,从第一步定义LOCAL_PATH到配置编译标签,包括静态库与动态库的区别,以及编译脚本的选择。通过一步步解析mk文件的结构,帮助读者理解如何编译和打包APK,同时提到了签名文件的使用和BUILD脚本的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇Blog主要记录向系统源码添加模块时使用的Makefile,和NDK编程使用的makefile有一些差异。

Android的mk文件是有很强的套路的,下面我在我的<android源码路径>/packsges/app/文件夹下建立一个名字叫做MakefileDemo的工程,里面的目录结构如图所示:![Alt text](./2017-01-11 14:34:49的屏幕截图.png)
libs存放了我使用的jar包这里目前只有一个dom4j-1.6.1.jar,src是存放源代码的目录,res是资源目录。
现在我们要编译这个apk(假设我们已经编译过一次系统源码)最主要的是Android,mk这个文件,这个文件告诉mmm(也可以是make,m,mm)命令如何去编译这个APK,下面就来一步一步写一下这个mk文件。

第一步

加入这段代码

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PATH := $(call my-dir),这句代码LOCAL_PATH是变量名,$(call my-dir)的意思是调用my-dir这个函数,这个函数的返回值是Android.mk这个文件所在的位置,对我这个项目来说该函数的返回值就是<android源码路径>/packsges/app/MakefileDemo/LOCAL_PATH这个变量是一定要定义的,它告诉编译系统当前模块的位置。

include $(CLEAR_VARS)这句代码的作用是清楚除了LOCAL_PATH变量之外的LOCAL_XXX变量,为什么要清楚这些变量呢?因为在编译MakefileDemo模块之前可能编译过别的模块,例如之前编译=过Launcher3这个模块人后这个模块升值了一个LOCAL_MODULE紧接着编译我们的MakefileDemo模块但是我们模块的mk文件不需要LOCAL_MODULE并且没有include $(CLEAR_VARS)清楚上个模块设置的变量,那么这个时候Launcher3LOCAL_MODULE变量就会被Build系统误认为是我们的MakefileDemo的,这样就会产生不可预知的错误。

两句代码是mk文件的标配,基本上所有的mk文件都需要这两句代码。

注:LOCAL_PATH := (callmydir)include (CLEAR_VARS)这句代码前面,否则call my-dir不能返回正确的结果,具体原因请参照这篇博客

第二步
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES :=$(call all-subdir
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值