Android编译系统-上

接下来准备把以前写的Android编译系统方面的资料整理成MarkDown.

这次Android编译系统的代码基于Android 6.0.

在整体来看Android编译系统的时候,有两个概念必须要十分清楚:Product和Device.

Product产品

不同的人对于产品的理解不一样,对于设计人员来讲,不同的产品对应着不同的外观,不同的尺寸,不同的材质。但是对于Android来讲,产品就是不同模块的组合。每一个模块由一个Android.mk编译。模块分为三类:

  1. 基础模块
比如AMS,PMS和Binder等都是基础模块,这些模块都是必须要编译的,否则Android无法启动
  1. 可选的基础模块

    比如packages/apps下面的应用

  2. 项目私有模块

大部分是和硬件特性相关的模块,比如双摄像头,指纹识别等。

我们一般都是根据足以让用户区分的硬件特性来定义产品,比如小米5和小米6是两款产品,他们拥有不同的外观设计,不同的硬件规格,比如小米5是单摄像头,小米6是双摄像头,他们的CPU也不一样,他们的外观和材质也不一样。这些不同的硬件feature软件上就对应不同的模块,模块的不同构成了产品的不同。

Device设备

同一个产品可能有不同的设备,比如小米5会有全网通版本,移动版本,电信版本等。这些不同的版本在软件概念上就对应不同的Device。虽然他们都叫小米5,但是由于硬件板级上的不同,造成了不同的Device.

我们编译出来的img,最终都要烧到对应的板子上,也就是对应的Device上。那么我们在编译过程中怎么确定我们正在编译的这个Rom是对应哪个Device呢?答案就是Target_Device这个变量,这是在编译过程中非常重要的一个变量,该变量决定了我们的img最终可以烧写到哪个Device上。

所以总结如下:

  • Product决定了这编译过程中都有哪些模块需要编译
  • Device决定了我们编译出来的img可以烧写到哪些设备上。

既然Target_Device这么重要,我们就来看一下编译系统是如何确定Target_Device的值得。

根据Android编译规范,我们的编译过程是从 source build/envsteup.sh开始的。
我们看一下这个envsetup.sh都做了哪些事情:

  • 定义了很多函数,比如mm,lunch等,也就是说只有在执行完这一步之后,这些函数才可以使用

  • 然后执行

    for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
         `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort`
    

去device和vendor目录下的4层文件夹之内寻找vendorsetup.sh这个文件。

这个vendorsetup.sh这个文件是做什么用的呢?
所有的vendorsetup.sh几乎都有这么一句类似的话
add_lunch_combo aosp_deb-userdebug,这句话的作用是把aosp_deb-userdebug加入到lunch菜单中。

我们在输入lunch命令之后,会出现一个编译菜单,比如:

  1. aosp_x86_64-eng
  2. aosp_deb-userdebug
  3. aosp_flo-userdebug

一般这个编译菜单格式固定:ProductName_DeviceName-BuildVarient
比如aosp_deb-userdebug,ProductName是aosp,DeviceName是deb,BuildVarient是userdebug。

在我印象中,在2.3之前必须按照这种格式定义lunch菜单,系统会根据这个这里的定义来推断Target_Device的值。但是由于现在我们可以在Makefile中指定Product_Device这个变量的值,然后会根据Product_Device的值去推断Target_Device的值,所以现在也可以不按照这种格式来定义lunch菜单了。

还有一个tips就是:

在Makefile中,类似Target_XXX这种格式的变量,都是编译框架根据别的变量自动生成的,所以一般我们不要再Makefile中更改Target_XXX这种形式的变量

Product_XXX这种形式的变量是编译系统提供给我们来修改的,我们可以对Prodcut_XXX这种形式的变量赋值。比如Product_Device := flo,编译框架会根据Product_Device的值来生成Target_Device的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容