内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

Android系统源码篇之(一):源码获取、源码目录结构及源码阅读

2018-11-06 20:01 出处:清屏网 人气: 评论(0

前言

       古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助。做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是Android开发中绝对的权威所在。Android系统开源,且占据了当今手机系统世界的绝大部分江山,各大手机厂商要做手机系统定制,就必须对Android系统源码非常熟悉,这就要求他们的工程师们去熟读源码。即使是纯第三方App的开发者,要想成为Android开发真正的行家里手,也必须对系统源码有一定的研究。本系列文章将记录笔者学习Android源码的理解和心得,以此来和广大的同行们进行交流和相互提升。

本篇文章是这一系列的第一篇,将主要记录或者介绍Android源码的获取,系统源码的宏观结构及内容,源码阅读工具推荐及使用方法等内容。主要内容如下:

一、获取Android系统源码

Android源码的获取方式有许多,既可以在Windows下去获取,也可以Linux下去下载,比较常见的方法是在Linux下用repo工具去下载。笔者使用的方式是在Windows7系统下安装Ubuntu16.04双系统,然后采用repo工具去获取的源码。其中每一个步骤都可以在网上找到很多资料,笔者不赘述,也不自己探索方法,这里仅记录下成功安装获取源码过程中参考的网页、主要步骤以及碰到的若干问题,以供读者和笔者自己以后参考使用。基本操作步骤如下:

1、在Win7中分区

在Windows7中为Ubuntu系统分区,参考了【 Win7下安装Ubuntu16.04成双系统 】中第一节分区步骤。Android系统源码未编译前就有大约20-30G大小,编译后更大,所以一定要预留足够的空间。

2、制作Ubuntu U盘系统启动盘

参看网页【 Ubuntu16.04安装基础入门教程 】前5步。Ubutu镜像文件从Ubutu官网下载即可,不过需要注意的是,要先弄清楚下载32位还是64位的系统:在主系统Win7桌面查看“计算机”图标属性,可以看到系统的位数,如下图所示:

所以咱们在选择Ubuntu系统的时候也选择64位的。这里笔者也有一个疑问,既然这里Ubuntu和Win7是独立的双系统,那么应该没有必要两个系统的位数必须一致吧,这里笔者没有研究过,读者可以去查资料探索一下,当然,选择同样的位数总是会比较保险一点。在Ubuntu下载版本中,结尾为amd64的版本为64位系统,结尾为i386的版本为32位系统。

3、U盘启动并安装Ubuntu系统

在BIOS boot中将默认的硬盘启动修改为U盘启动,然后重启即可进入到Ubuntu的安装界面,根据需要一步一步进行即可。至于如何进入到BIOS设置界面,不同的主板快捷键不一样,笔者这里不详述,读者根据主板型号百度即可。安装成功后,记得修改回来为默认硬盘启动。

4、Ubuntu中获取源码

参考【 Aosp|镜像使用帮助|清华大学开源镜像站 】,笔者选择的是“使用每月更新的初始化包”。源码比较大,所以下载需要好几个小时的时间,所以最好在晚上下载,避开网络使用高峰期。

5、碰到的问题记录

(1)安装完Ubuntu后,再重启时,系统选项中找不到原Win7系统。

安装好Ubuntu后,我们希望再启动电脑的时候出现一个系统选项,选择是进入原Win7系统还是新安装的Ubuntu系统。如提问中描述,找不到Win7系统选项入口,就无法进入到原来的Win7系统中。这种情况,请参考【 Win7系统安装Ubuntu系统后,不能进入Win7 】。笔者曾多次碰到过这个问题,以为是把原Win7系统给覆盖掉了,走过不少的弯路,后来找到链接中的方法才解决。

二、Android源码目录结构

       Android系统源码内容实在太广,其目录结构也实在庞大,每位开发者也无法做到对每一块都弄明白,工作中接触的也只是其中的一小部分。以下只从宏观上对系统源码的一级目录进行介绍,后续再慢慢完善更细致的内容。

三、Android系统架构和源码

在笔者以前的博客 【朝花夕拾】Android性能篇之(五)Android虚拟机 第二大点中简单介绍过Android的系统架构,其实在Native Libraries层Linux Kernel层之间还有一层——HAL层,即Hardware Abstract Layer,硬件抽象层。在众多介绍Android系统架构的展示图中,有的版本显示HAL,有的没有,读者知道有这一层就好了。如下为Android源码官网【 AOSP:Android Open Source Project 】中Android系统架构图,就展示HAL。

对于Android系统架构每一层,Android源码结构中都对应分配了目录。下图展示了在Android源码一级目录中,各框架层和部分目录的对应关系:

理解Android系统结构和Android系统源码的对应关系,有助于帮助咱们理解Anroid系统源码。当然,这幅思维导图中只介绍了源码一级目录和系统架构的对应关系,深入各个目录,每个系统架构层还可以找到很多源码与之对应,读者可以再深入研究研究。与此同时,同一个目录下的源码,也可能包含多个系统架构层,比如,frameworks层中就有frameworks/base/packages/SystemUI这个目录,众所周知,SystemUI是一款系统App,是属于应用层的。所以,对某个目录的功能,也不能一概而论。

四、Android源码阅读工具

选择好的源码阅读工具,可以让工作事半功倍。如今市面上有许多工具来辅助阅读源码,有在线阅读的,比如:AndroidXRef、Android SDK Search等;也有本地阅读的,比如:Source Insight等。同时,Google也提供了官方网站,用于指导开发者使用源码:【AOSP文档网站(中文版) https://source.android.google.cn/

1、AndroidXRef

前文也说过,Android源码非常庞大,下载源码也是非常耗用时间。我们可能经常碰到需要临时查看源码,而当前设备上没有的情况。幸运的是,有一些在线阅读源码的网站,给开发者带来了很大的便利,AndroidXRef就是其中一款备受青睐的源码在线阅读网站【网址: http://androidxref.com/ 】。在这里,笔者简单介绍一下该网站的基本使用。

(1)查看并选择系统版本

进入首页后,可以看到Google发布的各个系统版本,按照发布时间排序,包括版本别名,版本号,内核号等,如下图所示,开发者可以根据需要点击进入对应的版本。

(2)源码查找主界面功能点

(3)搜索条件的解锁及使用

1)Full Search

进行全文搜索,属于模糊查询,忽略大小写,会匹配所有的单词、字符串、标识符以及数字等,包括注释在内。如下图所示,为全文搜索“Activity”的结果,也显示了所在文件的路径,可以点击进入对应的文件。

2)Definition

搜索符号定义相关的代码。如下所示,同样输入“Activity”后,显示的搜索结果,“Activity”都是作为包名、类名或定义类型,方法名等出现的,可以和上面Full Search结果做对比。多次尝试搜索的结果来看,这里会区别大小写,搜索的也是整个单词,这里搜索会更精准一些。

3)Symbol

符号搜索,主要用于搜索类中的成员变量等,也是精确查找,如下图所示,就是根据成员变量“FEATURE_NO_TITLE”搜索的结果。

4)File Path

搜索源码文件名或路径中包含搜索条件字符串的文件,忽略大小写。如下所示,显示了文件路径或文件名中包含了“Activity”的结果。

5)History

该条件暂时没发现怎么使用,有写帖子上甚至直接说该条件没用,这里笔者不做说明,也不举例了。

该部分能够帮助开发人员快速定位到想要查看的代码,熟练使用,能极大地提高效率。上述介绍的都是单一条件搜索,开发人员可以根据实际情况对条件进行组合搜索,这样搜索起来就更精准了,使用起来很简单,这里不再举例子了。

2、Android SDK Search

该工具使用起来使得在线阅读源码更方便,将API和源码完美结合起来。但是使用该工具,需要VPN,即需要FQ,访问境外服务器。这里笔者就不详细介绍了,能FQ的读者,可以参考如下使用方法网址:【 Android SDK Search 使用方法 】。另外提供一个免费FQ工具,简单易用:【 蓝灯(Lantern) 】。

3、Source Insight

这是一款被开发者们广泛使用和称赞的本地源码阅读软件,除了阅读,还可以方便地进行开发。Source Insight工具功能强大,操作复杂,以后会专门写一篇文章来介绍它的使用,这里篇幅有限,就不详细介绍了。除此之外,还有很多开发工具可以用来阅读源码,比如Eclipse,Android Studio等都可以用来阅读系统源码,但这方面的功能无法和Source Insight相提并论,就不多做介绍了,把使用最广泛,最专业的工具用好就可以了。

本篇文章作为Android系统源码系列的第一篇,主要介绍了获取源码,以及源码阅读工具使用方法等方面内容,为后续深入分析和理解源码做准备工作。限于笔者的经验和知识水平,文中有论述不准确或不恰当的地方,请读者们多多指正,谢谢!

分享给小伙伴们:
本文标签: Android

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号