android Makefile

转载 2011年01月18日 22:43:00

android Makefile 收藏
今天有时间小看一下Android 的Makefile, 终于稍有明白Android 编译系统是如何通过环境变量 TARGET_PRODUCT 来决定编译定制product.

  首先, 编译Android 代码 通常情况下使用:

  # make showcommands

  这实际上等价于下面的完整命令 (具体参见 build/core/envsetup.mk )

  # TARGET_ARCH=arm TARGET_PRODUCT=generic TARGET_BUILD_TYPE=release make showcommands

  可见,默认情况下编译系统认为TARGET_PRODUCT 是generic 的

  那如何编译特定产品的Android呢?

  这就需要查看Android Makefile是如何解析环境变量TARGET_PRODUCT的。

  Android Makefile 的引用关系是这样的

  Makefile -> build/core/main.mk -> build/core/config.mk -> build/core/envsetup.mk -> build/core/product_config.mk

  在build/core/product_config.mk 中编译系统首先调用 build/core/product.mk中定义的函数get-all-product-makefiles ,来

  遍历整个vendor 的子目录, 找到vendor下所有的 AndroidProducts.mk, 不同子目录下的AndroidProducts.mk 中定义了不同的 PRODUCT_NAME, PRODUCT_DEVICE 等信息,(我们也可以通过 打开build/core/product_config.mk 中的#$(dump-products) 语句使控制台编译的时候输出所有product 的信息) , 接着build/core/product_config.mk 会调用resolve-short-product-name 将TARGET_PRODUCT匹配的AndroidProducts.mk 中定义的 PRODUCT_DEVICE 赋值给TARGET_DEVICE。

  有了这个TARGET_DEVICE, 再回到 build/core/config.mk,

  会include $(TARGET_DEVCIE)/BoardConfig.mk

  board_config_mk :=

  $(strip $(wildcard

  $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk

  vendor/*/$(TARGET_DEVICE)/BoardConfig.mk

  ))

  include $(board_config_mk)

  而这个配置文件BoardConfig.mk 决定了目标系统编译属性,比如使用ALSA还是不是 GENERIC_AUDIO 等等

  另外在这里TARGET_DEVICE 宏也决定了TARGET_DEVICE_DIR, 因为TARGET_DEVICE_DIR 取的是上面提到的BoardConfig.mk 的路径。

  TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))

当然Android 的Ob目标输出也是由TARGET_DEVICE决定,见build/core/envsetup.mk

  TARGET_OUT_ROOT_release := $(OUT_DIR)/target

  TARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target

  TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))

  TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product

  PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)

  再回到 build/core/main.mk, 编译系统接着做的一个件事情是,遍历所有字目录,找到所有Android.mk文件,并将这些Android.mk文件include 进来

  #

  # Typical build; include any Android.mk files we can find.

  #

  subdir_makefiles :=

  $(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs) Android.mk)

  include $(subdir_makefiles)

  我们再来看其中的

  ./build/target/board/Android.mk

  ,对了它引用了

  include $(TARGET_DEVICE_DIR)/AndroidBoard.mk

  由上面TARGET_DEVICE_DIR的定义,这下又进入了

  vendor 下TARGET_DEVICE指向的目录了,这个mk文件中定义了特定Product需要编译和安装app 和 script.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangzhu1982/archive/2010/09/10/5875416.aspx

Android实战技巧之三十六:Makefile快速入门

目标通过一篇文章的介绍达到能够编写简单Makefile以及能够看懂普通的Makefile之目的。make简介make是一个老牌的构建(build)工具,1970年问世以来已经度过了45年的时光而魅力不...
  • lincyang
  • lincyang
  • 2015年06月13日 13:12
  • 3997

Android makefile文件调试方法

最近有一个bug问题,本以为解起来分分钟就可以搞定,却耽误了大半天。借这个机会,记录一下自己的学习心得。这里先来描述一下应用场景。 1.应用场景 isp在调试af时需要将af一些配置文件(xml文件)...
  • armwind
  • armwind
  • 2016年12月01日 20:36
  • 681

深入浅出Android makefile(1)--初探

一、说明 android build system是一个非常庞大的系统,要编译Android工程、修改或新增Android模块都需要对这个编译系统有一定的了解。但是由于它实在是太庞大了,大家往往是不知...
  • lizzywu
  • lizzywu
  • 2013年10月17日 11:39
  • 10331

Android Makefile分析

随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧。当然,一部人追捧它是因为它是Google开...
  • andy_android
  • andy_android
  • 2011年11月11日 16:35
  • 10429

linux/android makefile使用小结

谨以此文作为编写makefile的遇到问题的小结
  • zhengxinwcking
  • zhengxinwcking
  • 2014年09月06日 10:18
  • 1688

android里makefile的写法

android里makefile的写法 (1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件,宏函数’my-dir’, 由编译系统提供。由于一般情况下Android.m...
  • lx627776548
  • lx627776548
  • 2016年08月24日 10:39
  • 1077

Android makefile讲解剖析

对于一个程序新手而言,好的IDE是他们追捧的对象。但当他接触的代码多了之后,就会逐渐发现IDE不够用了,因为有好多东西用IDE是不好做的, 例如自动编译,测试,版本控制,编译定制等。这跟政治课上的一...
  • u011467537
  • u011467537
  • 2016年11月21日 19:56
  • 623

手动写Makefile编译Android NDK的so

之所以摒弃NDK,是因为NDK编译出来的so太大,而且导出表总有一些没用的fu
  • bupt073114
  • bupt073114
  • 2014年11月10日 13:40
  • 2877

Android应用随系统编译makefile中如何添加so库

主要介绍某个项目跟随系统一起编译如何通过makefile添加so库。   帮另外一个项目救火,需要用到百度定位的sdk,一个依赖的jar包,一个需要放到armeabi中的liblocS...
  • u012242853
  • u012242853
  • 2015年01月27日 20:47
  • 1181

Android NDK Makefile

转自:http://blog.csdn.net/hebeizhangyouyi/article/details/8042067 参考   Android NDK中的docs/ANDROID-MK....
  • hjwang1
  • hjwang1
  • 2015年03月20日 19:46
  • 452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android Makefile
举报原因:
原因补充:

(最多只允许输入30个字)