《深⼊理解Android内核设计思想(第2版)(上下册)》之
Android源码下载及编译...
本⽂摘⾃⼈民邮电出版社异步社区《深⼊理解Android内核设计思想(第2版)(上下册)》
购书地址:
试读地址:
第2章 Android源码下载及编译
在分析Android源码前,⾸先要学会如何下载和编译系统。本章将向读者完整地呈现Android源码的下载流程、常见问题以及处理⽅法,并从开发者的⾓度来理解如何正确地编译出Android系统(包括原⽣态系统和定制设备)。
后⾯,我们将在此基础上深⼊到编译脚本的分析中,以“庖丁解⽜”的⽅式来还原⼀个庞⼤⽽严谨的Android编译系统。
2.1 Android源码下载指南
2.1.1 基于Repo和Git的版本管理
Git是⼀种分布式的版本管理系统,最初被设计⽤于Linux内核的版本控制。本书⼯具篇中对Git的使⽤⽅法、原理框架有⽐较详细的剖析,建议读者先到相关章节阅读了解。
Git的功能⾮常强⼤,速度也很快,是当前很多开源项⽬的⾸选⼯具。不过Git也存在⼀定的缺点,如相对于图形界⾯化的⼯具没那么容易上⼿、需要对内部原理有⼀定的了解才能很好地运⽤、不⽀持断点续传等。图片下载站源码
为此,Google提供了⼀个专门⽤于下载Android系统源码的Python脚本,即Repo。
在Repo环境下,版本修改与提交流程是:
⽤Repo创建新的分⽀,通常情况下不建议在master分⽀上操作;
开发者根据需求对项⽬⽂件进⾏修改;
利⽤git add命令将所做修改进⾏暂存;
利⽤git commit命令将修改提交到仓库;
利⽤repo upload命令将修改提交到代码服务器上。
由此可见,Repo与我们在⼯具篇中讨论的Git流程有些许不同,差异主要体现在与远程服务仓库的交互上;⽽本地的开发仍然是以原⽣的Git命令为主。下⾯我们讲解Repo的⼀些常⽤命令,读者也可以拿它和Git进⾏仔细⽐较。
1.同步
同步操作可以让本地代码与远程仓库保持⼀致。它有两种形式。
如果是同步当前所有的项⽬:
$ repo sync复制代码
或者也可以指定需要同步的某个项⽬:
$ repo sync [PROJECT1] [PROJECT2]…复制代码2.分⽀操作
创建⼀个分⽀所需的命令:
$ repo start <BRANCH_NAME>复制代码
也可以查看当前有多少分⽀:
$ repo branches复制代码
或者:
$ git branch复制代码
以及切换到指定分⽀:
$ git checkout <BRANCH_NAME>复制代码3.查询操作
查询当前状态:
$ repo status复制代码
查询未提交的修改:
$ repo diff复制代码
4.版本管理操作
暂存⽂件:
$git add复制代码
提交⽂件:
$git commit复制代码
如果是提交修改到服务器上,⾸先需要同步⼀下:
$repo sync复制代码
然后执⾏上传指令:
$repo upload复制代码
2.1.2 Android源码下载流程
了解了Repo的⼀些常规操作后,这⼀⼩节接着分析Android源码下载的全过程。这既是剖析Android系统原理的前提,也是让很多新⼿感到困惑的地⽅——源码下载可以作为初学者了解Android系统的“Hello World”。
值得⼀提的是,Android官⽅建议我们务必确保编译系统环境符合以下⼏点要求:
Linux或者Mac系统
在虚拟机上或是其他不⽀持的系统(例如Windows)上编译Android系统也是可能的,事实上Google⿎励⼤家去尝试不同的操作系统平台。不过Google内部针对Android系统的编译和测试⼯作⼤多是在Ubuntu LTS(14.04)上进⾏的。因⽽建议开发⼈员也都选择同样的操作系统版本来开展⼯作,经验告诉我们这样可以少⾛很多弯路。
如果是在虚拟机上运⾏的Linux系统,那么理论上⾄少需要16GB的RAM/Swap才有可能完成整个Android系统的编译。
对于Gingerbread(2.3.X)及以上的版本,64位的开发环境是必需的。其他旧的Android系统版本可以采⽤32位的开发环境。
需要⾄少100GB以上的磁盘空间才能完成系统的⼀系列编译过程——仅源码⼤⼩就已经将近10GB了。
Python 2.6-2.7,开发⼈员可以从Python官⽹上下载:。
GNU Make 3.81-3.82,开发⼈员可以从Gnu官⽹上下载:。
如果是编译最新版本的Android N系统,那么需要Java8(OpenJDK)。后续编译章节我们还会专门介绍。
Git 1.7以上版本,开发⼈员可以从Git官⽹上下载:
要特别提醒⼤家的是,以下所有步骤都是在Ubuntu操作系统中完成的(“#”号后⾯表⽰注释内容)。
1.下载Repo
$ cd ~  #进⼊home⽬录
$ mkdir bin #创建bin⽬录⽤于存放Repo脚本
$ PATH=~/bin:$PATH #将bin⽬录加⼊系统路径中
$ curl  > ~/bin/repo    #curl
#是⼀个基于命令⾏的⽂件传输⼯具,它⽀持⾮常多的协议。这⾥我们利⽤curl来将repo保存到相应⽬录下
$ chmod a+x ~/bin/repo复制代码
注:⽹上有很多开发者(中国⼤陆地区)反映上⾯的地址经常⽆法成功访问。如果读者也有类似困扰,可以试试下⾯这个:
$curl  > ~/bin/repo复制代码
另外,国内不少组织(特别是教育机构)也对Android做了镜像,如清华⼤学提供的开源项⽬(TUNA)的mirror地址如下:复制代码
下⾯是TUNA官⽅对Android代码库的使⽤帮助节选:
Android镜像使⽤帮助
参考Google教程 source/全部使⽤git://aosp.tuna.tsinghua.edu/android/代替即可。
本站资源有限,每个IP限制并发数为4,请勿使⽤repo sync-j8这样的⽅式同步。
替换已有的AOSP源代码的remote。
如果你之前已经通过某种途径获得了AOSP的源码(或者你只是init这⼀步完成后),你希望以后通过TUNA同步AOSP部分的代码,只需要将.l把其中
<manifest>
<remote  name="aosp"
-          fetch=""
+          fetch="git://aosp.tuna.tsinghua.edu/android/"
review="lesource" />
<remote  name="github"
这个⽅法也可以⽤来在同步Cyanogenmod代码的时候从TUNA同步部分代码复制代码
下载repo后,最好进⾏⼀下校验,各版本的校验码如下所⽰:
对于版本 1.17, SHA-1 checksum是:ddd79b6d5a7807e911b524cb223bc3544b661c28
对于版本 1.19, SHA-1 checksum是:92cbad8c880f697b58ed83e348d06619f8098e6c
对于版本 1.20, SHA-1 checksum 是:e197cb48ff4ddda4d11f23940d316e323b29671c
对于版本 1.21, SHA-1 checksum 是:b8bd1804f432ecf1bab730949c82b93b0fc5fede复制代码
2.Repo配置
在开始下载源码前,需要对Repo进⾏必要的配置。
如下所⽰:
$ mkdir source #⽤于存放整个项⽬源码
$ cd source
$ repo init -u
>>##以下为注释部分>###
init命令⽤于初始化repo并得到近期的版本更新信息。如果你想获取某个⾮master分⽀的代码,需要在命令最后加上-b选项。如:
$ repo init -u  -b android-4.0.1_r1
完成配置后,repo会有如下提⽰:
repo initialized in /home/android
这时在你的机器home⽬录下会有⼀个.repo⽬录,⽤于记录manifest等信息>>
>#复制代码
3.下载源码
完成初始化动作后,就可以开始下载源码了。根据上⼀步的配置,下载到的可能是最新版本或者某分⽀版本的系统源码。
$ repo sync复制代码
由于整个Android源码项⽬⾮常⼤,再加上⽹络等不确定因素,运⽓好的话可能1~2个⼩时就能品尝到“Android盛宴”;运⽓不好的话,估计⼀个礼拜也未必能完成这⼀步——如果下载⼀直失败的话,读者也可以尝试到⽹上搜索别⼈已经下载完成的源码包,因为通常在新版本发布后的第⼀时间就有热⼼⼈把它上传到⽹上了。
可以看到在Repo的帮助下,整个下载过程还是相当简单直观的。
提⽰:如果你在下载过程中出现暂时性的问题(如下载意外中断),可以多试⼏次。如果⼀直存在问题,则很可能是代理、⽹关等原因造成的。更多常见问题的描述与解决⽅法,可以参见下⾯这个⽹址。
复制代码
典型的repo下载界⾯如图2-1所⽰。
▲图2-1 原⽣Android⼯程的典型下载界⾯
Android系统本⾝是由⾮常多的⼦项⽬组成的,这也是为什么我们需要repo来统⼀管理AOSP源码的⼀个重要原因,如图2-2所⽰(部分)。
▲图2-2 ⼦项⽬
另外,不同⼦项⽬之间的branches和tags的区别如图2-3所⽰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论