深入浅出Android makefile(1)--初探(转载)
转载:http://nfer-zhuang.iteye.com/blog/1752368
一、说明
android build system是一个非常庞大的系统,要编译Android工程、修改或新增Android模块都需要对这个编译系统有一定的了解。但是由于它实在是太庞大了,大家往往是不知道从哪里切入进去,对Android的编译系统进行一个系统的学习。
下面我们尝试从一个小模块逐步对android build system做一个深入剖析。选择的这个模块名字叫做acp ,源码位于build\tools\acp目录。
后续很多模块的编译都需要使用到acp,根据编译依赖一般会先编译本模块。当然它也需要依赖到其他文件,需要的时候我们再进行阐述。
二、acp Android.mk初探
acp的Android.mk比较简单,去掉的无用代码后,如下面所示:
Makefile代码
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) LOCAL_SRC_FILES := acp.c LOCAL_STATIC_LIBRARIES := libhost
LOCAL_C_INCLUDES := build/libs/host/include
LOCAL_MODULE := acp
LOCAL_ACP_UNAVAILABLE := true include $(BUILD_HOST_EXECUTABLE)
上面的语句大致的意思就是,使用当前路径下的acp.c源码,引用的include和链接的library都是host模块,最终编译生成一个可在当前主机运行的可执行文件,名字为acp(linux环境)。。
这里我们先不谈每一个变量的具体含义和使用,我们先大概看一下一个Android.mk的基本组成。
三、 Android.mk基本组成
- LOCAL_PATH 定义了当前模块的相对路径,必须出现在所有的编译模块之前
- 每个编译模块由include $(CLEAR_VARS) 开始,由include $(BUILD_XXX) 结束
- include $(CLEAR_VARS) 是一个编译模块的开始,它会清空除LOCAL_PATH之外的所有LOCA_XXX变量
- include $(BUILD_XXX) 描述了编译目标
- LOCAL_SRC_FILES 定义了本模块编译使用的源文件,采用的是基于LOCAL_PATH的相对路径
- LOCAL_MODULE 定义了本模块的模块名
编译acp还需要了几个可选的变量:
- LOCAL_STATIC_LIBRARIES 表示编译本模块时需要链接的静态库
- LOCAL_C_INCLUDES 表示了本模块需要引用的include文件
- LOCAL_ACP_UNAVAILABLE 表示是否支持acp,如果支持acp,则使用acp进行拷贝,否则使用linux cp拷贝,本模块编译acp,当然是不支持acp了
四、编译目标
| 编译目标 | 说明 |
| BUILD_HOST_STATIC_LIBRARY | 主机上的静态库 |
| BUILD_HOST_SHARED_LIBRARY | 主机上的动态库 |
| BUILD_HOST_EXECUTABLE | 主机上的可执行文件 |
| BUILD_STATIC_LIBRARY | 目标设备上的静态库 |
| BUILD_SHARED_LIBRARY |
目标设备上的动态库
|
| BUILD_EXECUTABLE |
目标设备上的可执行文件
|
| BUILD_JAVA_LIBRARY | JAVA库 |
| BUILD_STATIC_JAVA_LIBRARY | 静态JAVA库 |
| BUILD_HOST_JAVA_LIBRARY | 主机上的JAVA库 |
| BUILD_PACKAGE | APK程序 |
深入浅出Android makefile(1)--初探(转载)的更多相关文章
- 深入浅出Android makefile(2)--LOCAL_PATH(转载)
转自:http://nfer-zhuang.iteye.com/blog/1752387 一.说明 上文我们对acp的Android.mk文件做了一个大致的描述,使得大家对Android.mk文件有了 ...
- 基于unity3d游戏的android版本逆向初探
https://bbs.pediy.com/thread-212532.htm [文章标题]: 基于unity3d游戏的android版本逆向初探 [文章作者]: dreaman [作者邮箱]: [e ...
- 【转】深入浅出Android Support Annotation
[转自]http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0427/2797.html http://www.flysnow.org/201 ...
- 深入浅出 - Android系统移植与平台开发(一)
深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkub ...
- android Makefile把jar包打到apk里
这个是经常的需求,我就是经常忘,关键不理解啊. 反反复复的也看看了android makefile. 太复杂了. 慢慢来吧.哎.工作十年.啥也不会.咋整? ## Copyright (C) 2008 ...
- Android makefile编写基础
首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来: LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_M ...
- Android Makefile中是 如何识别 TARGET_PRODUCT 的
http://blog.csdn.net/stevenliyong/article/details/5285334 今天有时间小看一下Android 的Makefile, 终于稍有明白Android ...
- android开发环境搭建日记和嵌入式Android开发环境初探
非常感谢博客园的各位,按照你们的博文,还有利用百度和谷歌逐渐建立了android的开发环境,只是给自己备份参考查看,看过的人可以忽略这篇文章. 本文章大部分参考了:http://www.cnblogs ...
- Android性能优化文章转载
今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...
随机推荐
- 集训第五周动态规划 J题 括号匹配
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- cookie、localStorage和sessionStorage三者的异同
1.三者都是用来存储浏览器数据的 2.生命周期:cookie可以设置数据失效时间,默认是关闭浏览器后失效:localStorage中的数据是永久保存的,除非手动清除:sessionStorage的数据 ...
- 使用回溯法解批处理作业调度问题<算法分析>
一.实验内容及要求 1.要求用回溯法原理求解问题: 2.要求手工输入t1[10]及t2[10],t1[i]是任务i在机器1上的执行时间,t2[i]是任务i在机器2上的执行时间: 3.求出最优批处理作业 ...
- Error connecting to database: No such file or directory
标签:Error connecting to database: No such file or directory 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...
- Eclipse配置SVN的几种方法及使用详情
此文章对Myeclipse同样适用. 一.在Eclipse里下载Subclipse插件 方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help ...
- 【ZJOI2018 Round2游记】
在主场作为高三退役选手要去听一些奇怪的宣讲 看看有没有PY的机会 语文考试考到一半溜出来 ZJU先上 开始挑衅 很勇啊 THU的校友 然而这些都离我太过遥远 最后PY了一波 获得了鼓励(并不) 最后的 ...
- Linux下汇编语言学习笔记15 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- 洛谷 P1081 开车旅行(70)
P1081 开车旅行 题目描述 小AA 和小BB 决定利用假期外出旅行,他们将想去的城市从 11到 NN 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 ii的海 ...
- SaltStack学习系列之自定义grains
Master端 打开存放自定义grains的目录 vim /etc/salt/master file_roots: base: - /srv/salt/ 建立自定义模块 cd /srv/salt mk ...
- Ubuntu如何开启root账户登录
1 首先设置root密码,利用现有管理员帐户登陆Ubuntu,在终端执行命令:sudo passwd root,接着输入密码和root密码,重复密码.这样就有了可用的root用户. 2 打开一个终 ...