为了仰望一下android这棵大树,源码是最直接,最有效的途径。所以除了下载源码外,还需要搭建一个快速有效的环境进行源码的阅读。对于新手来说,为了不被困难拖住脚步,还是选择最熟悉,最方便的工具和环境。本文是对自己折腾了许久的搭建源码阅读环境的总结。
步骤:
(1)、ubuntu安装
选择的是vmware,下载ubuntu16安装镜像,安装步骤很简单,网上教程很多,需要注意的是最好分配100G以上的磁盘空间。若装好后发现空间不足,可以网上找教程进行扩容。我选择的方式是删除磁盘空间不足的虚拟机,重新安装时重新配置虚拟机的磁盘容量。
(2)、网络配置
在虚拟机设置中,将网络连接方式设置为桥接模式,并设置固定ip地址,桥接模式下虚拟机和宿主机处于同一网段,和主机位于相同网络环境下。使用nat(网络地址转换)应该也可以,没有测试过。固定ip地址后,在宿主机上可以用固定ip地址通过xshell或者secureCRT连接到ubuntu虚拟机。在外面用工具连接比在虚拟机内登陆界面要友好。
(3)、工具安装(vmare tools)
为了尽快上手开始学习源码,利用一些工具实现文件共享,免得需要在ubuntu上开各种协议来传输文件,在ubuntu中安装vmware tools工具,vmware tools提供一些宿主机和虚拟机之间的文件共享和主机时间同步等功能。文件共享可实现在宿主机和虚拟机之间建立一个共享目录,进行文件传递交换。这里详细介绍一下按照步骤:网上有很多教程,说点击虚拟机选项卡-----在虚拟机启动的情况下点击安装vmware tool,但是我的情况是在不启动和启动虚拟机的情况下“安装vmware tools”都是灰色的,无法 点击。因此,我的方法是在网上下载vmware tools的安装tar包,然后通过虚拟机的cd/DVD光驱加载,然后在ubuntu中进行安装。
2、下载源码。
我下载源码是采用先下载aosp镜像,然后repo sycn。这种方法可以避免直接使用git的方式下载过程长,容易出现传输问题,导致需要重新下载的情况。下载地址是国内的,清华大学提供的镜像下载,比起直接通过git下载速度要快,且传输更可靠。下载地址及说明在这里:https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
(最初想用cygwin,在window环境下搭建阅读环境,后来发现cygwin默认有很多工具没有,如果要使用,需要装的时候勾选上这些工具,并在安装过程中下载,非常耗时,下载容易失败。最终还是选择了装虚拟机,另外下载源码应该可以ubuntu里面使用浏览器下载到虚拟机里面。下载的代码tar包有20多个G,然后解压时没找到边解压边删除的命令。导致空间需求要翻倍,后续还要同步最新的代码,又有空间需求,因此两次空间不足的经历得出最好为虚拟机分配100G以上的磁盘空间。)
为了实现在windows宿主机上查看ubuntu虚拟机上的android源码,并且在有修改后可以同步到ubuntu系统中保存。由于两者的文件系统格式不一样,我试过采用vmware tools提供的共享文件的方式来实现这一需求,但是不行。tar包在共享目录解压的时候会报错。用samba服务可以完美的实现这样的需求。在ubuntu上安装并配置samba服务,请参考这篇博文:http://blog.chinaunix.net/uid-23069658-id-3142052.html ,有前人的经验总结就没必要重复劳动了。只是需要注意一个问题: 在重启samba服务使之生效一般情况下,我们会使用sudo service samba restart,但会提示Failed to start samba.service: Unit samba.service is masked.原因是16.04的服务是使用systemd进行管理了,重启服务的命令应该为:sudo systemctl restart smbd.service 。
在windows的资源管理器中“添加一个网络驱动位置”或者在地址栏中输入\\虚拟机ip\代码目录,在数据samba用户名和密码后即可以访问samba中配置的ubuntu上的文件目录。然后下载安装sourceinsight,在sourceinsight中添加该网络驱动位置中的android源码即可。
最后,在ubuntu中执行sudo apt-get install xxx安装软件时,遇到ubuntu报错--Could not get lock /var/lib/dpkg/lock,请参考:http://www.2cto.com/os/201305/213648.html 。
提供一个快速上手阅读android源码的环境搭建路径。介绍得不详细,涉及的相关细节在网上都可以找到答案。本人觉得samba是这个环境搭建最重要的工具,让新手实现了在windows的环境下,就如同在本地存取文件一样在sourceinsight中阅读源码。并且后续还可以在sourceinsight中修改了源码后在ubuntu的环境中编译。通过添加一些log打印,在ubuntu的环境中编译后运行,去了解程序的一些调用关系等。sourceinsight是一款很好用的阅读代码神器,它的全局搜索,函数调用树形图展示,调用跳转、定义跳转等都是很好用的功能。