Android.mk学习 笔记
感谢:
原创作品 转载请注明出处:http://www.cnblogs.com/langlang/
作者email: dayhappyhappy@163.com
LOCAL_PATH := $(call my-dir)
{
首先需要指定LOCAL_PATH变量,用于查找源文件
上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径
} #Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始
#以include $(BUILD_XXX)结束。
include $(CLEAR_VARS) //开始
{
问: CLEAR_VARS是什么??
答: CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,
如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。
}
#包含的头文件
LOCAL_C_INCLUDES += \
hardware/led/include/ LOCAL_PRELINK_MODULE := false // :=是赋值的意思
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
{
//LOCAL_MODULE_PATH: 最后的目标安装路径 问: TARGET_OUT_SHARED_LIBRARIES是什么?
答: 在build/core/envsetup.mk中定义。TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。 }
LOCAL_SHARED_LIBRARIES := liblog //LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称
LOCAL_SRC_FILES := led.cpp
LOCAL_MODULE :=led.default //LOCAL_MODULE表示模块最终的名称
#LOCAL_MODULE的定义规则,led后面跟有default,led.default能够保证我们的模块总能被硬象抽象层加载到
LOCAL_MODULE_TAGS := eng
include $(BUILD_SHARED_LIBRARY) // 结束
{
include $(BUILD_STATIC_LIBRARY)表示编译成静态库
include $(BUILD_SHARED_LIBRARY)表示编译成动态库。
include $(BUILD_EXECUTABLE)表示编译成可执行程序
} LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,
LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,
LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,
LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。 hardware\led\Android.mk
include $(call all-subdir-makefiles) frameworks\base\services\forlinx_led_jni\LedService.cpp
frameworks\base\services\forlinx_led_jni\Android.mk
{ LOCAL_PATH:= $(call my-dir) //LOCAL_PATH变量定义成本文件所在目录路径
include $(CLEAR_VARS) # [optional, user, eng]
# eng = required
# optinal = no install on target
LOCAL_MODULE_TAGS := eng
{
LOCAL_MODULE_TAGS :=optional -->> out/target/product/OK6410/symbols/system/
LOCAL_MODULE_TAGS :=eng -->> out/target/product/Ok6410/system/
} # This is the target being built.
LOCAL_MODULE:= libforlinx_runtime # Target install path.
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES) # All of the source files that we will compile.
LOCAL_SRC_FILES:= \
LedService.cpp # All of the shared libraries we link against.
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libcutils \
libhardware \
libhardware_legacy \
libnativehelper \
libsystem_server \
libutils \
libui \
libsurfaceflinger_client # Also need the JNI headers.
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE) \
hardware/led/include # No specia compiler flags.
LOCAL_CFLAGS +=
{
LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays
通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
LOCAL_CFLAGS += -W -Wall
LOCAL_CFLAGS += -fPIC -DPIC
LOCAL_CFLAGS += -O2 -g -DADB_HOST= -Wall -Wno-unused-parameter
LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -DSH_HISTORY
LOCAL_CFLAGS += -DUSEOVERLAY2
根据条件选择相应的编译参数
} # Don't prelink this library. For more efficient code, you may want
# to add this library to the prelink map and set this to true.
LOCAL_PRELINK_MODULE := false
{
Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,
是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的
动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。
动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接
动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间
利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序
启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。
Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保
证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么 android framework代码一改动,
这时候就会导致相关的应用程序重新被编译。
这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。
} include $(BUILD_SHARED_LIBRARY)
}
Android.mk学习 笔记的更多相关文章
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
		---------------------------------------------------------------------------------------------------- ... 
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
		---------------------------------------------------------------------------------------------------- ... 
- android开发学习笔记000
		使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ... 
- Android动画学习笔记-Android Animation
		Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ... 
- Android 数字签名学习笔记
		Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ... 
- Android:日常学习笔记(9)———探究持久化技术
		Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ... 
- Android:日常学习笔记(9)———探究广播机制
		Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ... 
- Android:日常学习笔记(8)———开发微信聊天界面
		Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以. 
- Android:日常学习笔记(8)———探究UI开发(5)
		Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ... 
随机推荐
- Bitnami Redmine安装和插件配置
			公司要进行敏捷开发管理,最后选择Redmine作为管理工具. 而Redmine本身的安装非常麻烦,要安装mysql,ruby,redmine,apach. 显然这不是一个偷懒的人应该做的,最后找到Bi ... 
- python 代码片段10
			#coding=utf-8 #元组是列表的近亲.列表用方括号,元组用小括号 #django配置文件大量用到元组 #注意,单个元素的元组要求在最后"必须"跟一个逗号. a=(&quo ... 
- Linux redirect the stdout to a file
			1: int save_out = dup(fileno(stdout));//backup stdout 2: int out = open("cout.log", O_RD ... 
- HDU 1561 (树形DP+背包)
			题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1561 题目大意:从树根开始取点.最多取m个点,问最大价值. 解题思路: cost=1的树形背包. 有 ... 
- 洛谷  P1147 连续自然数和  Label:等差数列
			题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个 ... 
- NOIp 2006 作业调度方案  Label:坑 模拟(tyvj你不给我ac,我就把名字献给附中oj)
			福建师大附中链接:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1211 [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序 ... 
- BZOJ4012 [HNOI2015]开店
			Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现 ... 
- COJ 拯救瑞恩
			试题描述 在n行n列的字符方阵中I表示“我”最初所在位置,R是大兵瑞恩所在位置.4<n<11.“我”从当前位置可以向上.或下.或左.或右移动一格,只要新点无障碍且未出界.标有“.”的位置可 ... 
- php如何把文件上传到服务器上
			conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12 ... 
- PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)
			L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ... 
