Android.mk解析【转】
一、变量说明:
1.LOCAL_PATH:= $(call my-dir)
此行代码在Android.mk的开头,用于给出当前文件的路径
LOCAL_PATH 用于在开发树中查找源文件
宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)
2.LOCAL_PACKAGE_NAME := SecSettings 或 LOCAL_MODULE:= SecSettings
标识在Android.mk文件中描述的每个模块。名称必须是唯一的且不包含空格。
注意编译系统会自动产生合适的前缀和后缀:
静态库:又称为文档文件(Archive File),多个.o文件的集合,linux中静态库文件的后缀为“.a”
LOCAL_STATIC_JAVA_LIBRARIES := static-library
LOCAL_STATIC_JAVA_LIBRARIES += libSR
共享库:多个.o文件的集合,一个被命名为'foo'的共享库模将会生成'libfoo.so'文件。
LOCAL_SHARED_LIBRARIES := libBMapApiEngine_v1_3_5
重要注意事项:如果你把库命名为‘libhelloworld’,编译系统将不会添加任何的lib前缀,也会生成libhelloworld.so,这是为了支持来源于Android平台的源代码的Android.mk文件。如果你确实需要这么做的话。
3.LOCAL_MODULE_TAGS := optional / user / eng / tests 可选定义
该模块在所有版本下都编译/ 该模块只在user版本下才编译/ 该模块只在eng版本下才编译/ 该模块只在tests版本下才编译
4.LOCAL_OVERRIDES_PACKAGES := Settings
覆盖其他所有同名的应用
5.LOCAL_CERTIFICATE := platform 可选定义
编译一个需要platform签名的APK,而不是share编译
6.LOCAL_PROGUARD_FLAG_FILES := proguard.flags
指定不需要混淆的native方法与变量的proguard.flags文件
ProGuard的主要作用就是混淆:Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。
7.LOCAL_PROGUARD_ENABLED:= disabled
制定编译的工程,不要使用代码混淆的工具进行代码混淆:
8.LOCAL_CLASSPATH := $(LOCAL_PATH)/lib/maps.jar
9.LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += src/com/android/settings/nearby/IMediaServer.aidl
变量 LOCAL_SRC_FILES 必须包含将要编译打包进模块中的源代码文件
不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好
10.LOCAL_RESOURCE_OVERLAY_DIR := $(LOCAL_PATH)/TN_CHN_OPEN/res
指定资源文件路径
11.LOCAL_AAPT_FLAGS := $(SEC_DEV_APP_LOCAL_AAPT_FLAGS)
指定打包资源文件
因为Android的工具aapt在生成apk文件时默认地会编译并压缩res/下的文件,而一些系统文件则不需要被压缩(否则在读取该文件时需要解压缩),在Android.mk文件需要指定以下选项告诉aapt工具不压缩所的文件。
例如Android.mk文件需要指定以下选项告诉aapt工具不压缩所有.dat文件:
LOCAL_AAPT_FLAGS := -0 .dat
二、语句解释
1.include $(CLEAR_VARS)
CLEAR_VARS由编译系统提供(可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的,让GNU MAKEFILE清除许多LOCAL_XXX变量,例如 :LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...
该语句的意思就是把CLEAR_VARS变量所指向的脚本文件包含进来。
2. include $(BUILD_PACKAGE)
指定编译生成APK
3.include $(BUILD_STATIC_LIBRARY)
用于编译一个静态库,将会生成一个名为lib$(LOCAL_MODULE).a的文件
静态库不会复制到的APK包中,但是能够用于编译共享库。
4.include $(BUILD_SHARED_LIBRARY)
指向编译脚本,根据所有的在 LOCAL_XXX 变量把列出的源代码文件编译成一个共享库,将生成一个名为lib$(LOCAL_MODULE).so的文件
注意:你必须至少在包含这个文件之前定义LOCAL_MODULE和LOCAL_SRC_FILES
5.$(info RES_OVERLAY TN_CHN_OPEN/RES/)
相当于代码中的log信息
6.ifneq($(filter santos10%,$(TARGET_PRODUCT)),)
##############################################
endif
判断是否含有santos10***的string,有的话,进入ifneq条件
Filter有两个参数
7..ifneq($(filter %wifi,$(PROJECT_NAME)),)
###############################################
endif
判断是否含有***wifi,如果有进入ifneq条件
8. +=
原来有的话不覆盖
9.:=
之前的值清空,重新复制
10.LOCAL_RESOURCE_OVERLAY_DIR:=$(LOCAL_PAHT)/TN_CHN_OPEN/res $(LOCAL_RESOURCE_OVERLAY_DIR)
相当于
LOCAL_RESOURCE_OVERLAY_DIR := $(LOCAL_PAHT)/TN_CHN_OPEN/res
LOCAL_RESOURCE_OVERLAY_DIR += LOCAL_RESOURCE_OVERLAY_DIR(原来的)
11.ifeq($(findstring santos3g,$(PROJECT_NAME)),cantos3g)
###################################################
endif
如果PROJECT_NAME中含有santos3g,进入ifeq条件
如何查找PROJECT_NAME与TARGET_PRODUCT的值
1.到编译log中搜索,即可得到
2.到脚本中查找,
./buildscript/build中
export PROJECT_NAME=${_BUILD_PROJECT_NAME%%_*}
而_BUILD_PROJECT_NAME就是$1
我们的输入如果是santos103g_chn_open那么PROJECT_NAME=santos103g
12. ifeq (true,$(call spf_check, EC_PRODUCT_FEATURE_TEMP_REGION,CHN))
Check 地区是不是CHN,如果是,进入ifeq条件
三、Settings的Android.mk 的相关介绍
1.地区宏:SEC_PRODUCT_FEATURE_TEMP_REGION
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_REGION,HKTW))
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_REGION,CHN))
2.运营商宏:SEC_PRODUCT_FEATURE_TEMP_OPERATOR
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_OPERATOR,CMCC))
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_TEMP_OPERATOR,CTC))
3.双卡宏:BUILD_MULTISIM_PROJECT
SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT
ifeq ($(BUILD_MULTISIM_PROJECT),true)
控制双卡相关文件路径为:TN_MultiSIM/…
ifeq (true,$(call spf_check,SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT,TRUE))
控制双卡相关文件路径为:TN_DSDS/…
上面三个宏的定义路径:
//JBP_MAIN/Maple/JBP98x/model/vendor/wilcoxds/SecProductFeature.wilcoxdszn
OpenGrok/android/vendor/samsung/wilcoxds/SecProductFeature.wilcoxdszn
# Region, Operator feature
SEC_PRODUCT_FEATURE_TEMP_REGION="CHN"
SEC_PRODUCT_FEATURE_TEMP_OPERATOR="CU"
#Common DSDS Feature
SEC_PRODUCT_FEATURE_COMMON_DSDS_SUPPORT=TRUE
# another micro for multisim module
SEC_PRODUCT_FEATURE_COMMON_USE_MULTISIM=TRUE
4.平台控制宏: BUILD_RIL_MARVELL_RIL
ifeq ($(BUILD_RIL_MARVELL_RIL), true)
5.项目名控制:TARGET_PRODUCT
ifneq ($(filter wilcoxds%, $(TARGET_PRODUCT)),)
转载于:https://www.cnblogs.com/chenyready/p/7986749.html
Android.mk解析【转】相关推荐
- Android.mk解析与使用
Android.mk解析与使用 一.Android.mk文件的作用 二.简单示例 三.详细解析 1. 定义当前模块的位置 2. 清除LOCAL_XXX变量 3. 需要编译的文件 4. 定义编译生成的模 ...
- Android.mk解析
一.变量说明: 1.LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk的开头,用于给出当前文件的路径 LOCAL_PATH 用于在开发树中查找源文件 宏函数'my- ...
- Android.mk文件语法规范及使用模板 (转载)
2019独角兽企业重金招聘Python工程师标准>>> http://blogold.chinaunix.net/u3/99423/showart_2206760.html Andr ...
- Android.mk简介
Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变 ...
- android.mk 比较字变量,Android.mk的用法和基础
一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...
- 【翻译】(5)Android.mk File
----------------- 英文文档见android-ndk-r5b的documentation.html 属于Android Native Development Kit (NDK)的一部分 ...
- 4.android.mk编写规范
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...
- android.mk 翻译,翻译ANDROID-MK.TXT
Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的,这篇文档描述了它的语法.在阅读下面的内容之前,假定你已经阅读了docs/OVERVIEW.TXT文件,了解了它 ...
- Android 系统(182)---Android.mk的用法和基础 amp;amp; m、mm、mmm编译命令
Android.mk的用法和基础 && m.mm.mmm编译命令 一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分, ...
最新文章
- Python的包管理工具Pip
- PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
- php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解
- 为什么有必要对网站开启https?
- 【OpenCV入门指南】第十一篇 鼠标绘图
- java 我的世界 反编译_基于mcp940反编译Minecraft源代码
- 微服务SpringBoot整合Jasypt加密工具
- 某P2P开发商ERP系统核心业务介绍
- uni-app上传安卓应用市场的坑
- xss.haozi练习通关详解
- 五个核心能力打造普惠金融商业化发展模式
- Entry name *.xml collided终极解决方案
- CSS学习笔记之练习 2.25
- winrar正确破解方法
- [19/05/14-星期二] HTML_body标签(列表标签和图片标签)
- 真兰仪表通过深交所注册:拟募资17.4亿 上半年净利下降27%
- 计算机软件基础模式上课稿,中南大学大学计算机基础模拟试题讲课稿.pdf
- 谁是谷歌想要的人才--面试
- 一只小蜜蜂... (JAVA)
- pytest—pytest.mark.parametrize的使用
热门文章
- 【Qt】Qt5.12编译MySQl5.7驱动(在线亲自指导)
- 【Linux网络编程】浅谈 C/S 和 B/S 架构
- oracle10g的silent,Linux 静默(Silent) 安装Oracle 10g
- 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
- oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志
- java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。
- xboxone硬盘坏的表现_【32期】硬盘损坏的根源居然是——它!
- Apache Web Server - httpd的HTTP的多路处理模块MPM
- 每天一道LeetCode-----有序数组右移n位后查找某个元素
- mysql数据库优化韩顺平_韩顺平 Mysql数据库优化(一) 优化概述