一、变量说明:

1.LOCAL_PATH:= $(call my-dir)

此行代码在Android.mk的开头,用于给出当前文件的路径

LOCAL_PATH 用于在开发树中查找源文件

宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)

2.LOCAL_PACKAGE_NAME := SecSettingsLOCAL_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条件

SettingsAndroid.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解析【转】相关推荐

  1. Android.mk解析与使用

    Android.mk解析与使用 一.Android.mk文件的作用 二.简单示例 三.详细解析 1. 定义当前模块的位置 2. 清除LOCAL_XXX变量 3. 需要编译的文件 4. 定义编译生成的模 ...

  2. Android.mk解析

    一.变量说明: 1.LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk的开头,用于给出当前文件的路径 LOCAL_PATH 用于在开发树中查找源文件 宏函数'my- ...

  3. Android.mk文件语法规范及使用模板 (转载)

    2019独角兽企业重金招聘Python工程师标准>>> http://blogold.chinaunix.net/u3/99423/showart_2206760.html Andr ...

  4. Android.mk简介

    Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变 ...

  5. android.mk 比较字变量,Android.mk的用法和基础

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  6. 【翻译】(5)Android.mk File

    ----------------- 英文文档见android-ndk-r5b的documentation.html 属于Android Native Development Kit (NDK)的一部分 ...

  7. 4.android.mk编写规范

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

  8. android.mk 翻译,翻译ANDROID-MK.TXT

    Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的,这篇文档描述了它的语法.在阅读下面的内容之前,假定你已经阅读了docs/OVERVIEW.TXT文件,了解了它 ...

  9. Android 系统(182)---Android.mk的用法和基础 amp;amp; m、mm、mmm编译命令

    Android.mk的用法和基础 && m.mm.mmm编译命令 一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分, ...

最新文章

  1. Python的包管理工具Pip
  2. PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
  3. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解
  4. 为什么有必要对网站开启https?
  5. 【OpenCV入门指南】第十一篇 鼠标绘图
  6. java 我的世界 反编译_基于mcp940反编译Minecraft源代码
  7. 微服务SpringBoot整合Jasypt加密工具
  8. 某P2P开发商ERP系统核心业务介绍
  9. uni-app上传安卓应用市场的坑
  10. xss.haozi练习通关详解
  11. 五个核心能力打造普惠金融商业化发展模式
  12. Entry name *.xml collided终极解决方案
  13. CSS学习笔记之练习 2.25
  14. winrar正确破解方法
  15. [19/05/14-星期二] HTML_body标签(列表标签和图片标签)
  16. 真兰仪表通过深交所注册:拟募资17.4亿 上半年净利下降27%
  17. 计算机软件基础模式上课稿,中南大学大学计算机基础模拟试题讲课稿.pdf
  18. 谁是谷歌想要的人才--面试
  19. 一只小蜜蜂... (JAVA)
  20. pytest—pytest.mark.parametrize的使用

热门文章

  1. 【Qt】Qt5.12编译MySQl5.7驱动(在线亲自指导)
  2. 【Linux网络编程】浅谈 C/S 和 B/S 架构
  3. oracle10g的silent,Linux 静默(Silent) 安装Oracle 10g
  4. 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
  5. oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志
  6. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。
  7. xboxone硬盘坏的表现_【32期】硬盘损坏的根源居然是——它!
  8. Apache Web Server - httpd的HTTP的多路处理模块MPM
  9. 每天一道LeetCode-----有序数组右移n位后查找某个元素
  10. mysql数据库优化韩顺平_韩顺平 Mysql数据库优化(一) 优化概述