Android拓展系列(3)--Android源码下载

十度 Android 2015年12月01日 收藏

前几天,又切换回ubuntu11.04系统了,体验以下unity桌面。
 android系统源码(包括sdk源码)的下载主要是需要用到git工具,关于git工具的使用我会抽空专门介绍,这里用到的时候简略说明一下。
1.安装git和curl
命令:

$sudo apt-get install git-core curl

说明:
      curl是一个向服务器或从服务器传输数据的工具,它支持HTTP 、HTTPS、FTP 、 FTPS 、 SCP、SFTP、TFTP、DICT、TELNET、LDAP或FILE等协议。对于web开发人员来说,它对HTTP POST的支持为我们提供了很大的帮助。

     git是分布式的版本控制系统,在这里负责把远程版本库的源代码clone下来。

2. 安装repo
命令: 

$mkdir bin
//下载repo脚本到本地bin文件夹下
$curl http://android.git.kernel.org/repo >~/bin/repo
//设置本地repo的可执行权限
$chmod a+x ~/bin/repo 
//临时把repo添加到环境变量中,方便后面执行。
$export PATH=~/bin:$PATH

 说明:
      repo是一个基于git的版本库管理工具,可以简化android开发中使git的使用。在这里,使用repo和官方提供的android project列表自动批量下载android整个项目,免去了大量下载各个项目的手动工作量。

3.初始化repo客户端
命令:

//创建目录android/android-source来存放下载的源码
$mkdir android/android-source -p
//进入目录
$cd android/android-source
//获取项目列表并且初始化目录
$repo init -u git://android.git.kernel.org/platform/manifest.git

      初始化完成后会显示repo initialized in /home/http://www.cnblogs.com/xx,如下图:
 

4.同步版本库
命令:

$repo sync

      说白了,就是从服务器上下载最新的代码。
      接下来就是漫长的等待,本人10M带宽,依然下载了几个小时。忘记截图了,就不贴了。 

5.下载单个项目的源码
      前面我们把android整个项目都下载下来了 ,包括虚拟机,SDK,NDK等,但是对于相当多的应用开发者来说,只需要下载android sdk源代码就足够了,没必要下载3个多G的全部源码。
      所以,我们以SDK源码为例子,演示如何使用git下载单个项目工程(下载单个项目不需要repo工具)。
      打开网页http://android.git.kernel.org/,包含大量的android相关的工程。
      android SDK的代码包括在android核心框架中。工程路径为 platform/frameworks/base.git。
      命令:

//进入之前建立的android目录
$cd android
//克隆服务器端的base的版本库和代码到android-sdk-source目录下
$git clone git://android.git.kernel.org/platform/frameworks/base.git android-sdk-source

      等待一会儿,大概200M,下载完成后,如下图。
 
      类似的,你可以下载任何其他的单个项目到本地。

6.获取各个版本SDK源码
      关于获取各个版本的SDK源码,网上还是身边经常有人急需阿,跪求阿什么的,今天我在这里抛砖引玉,演示一下方法,但是不提供下载,毕竟文件还是有一定的大小的。
      首先我们现获取SDK的各版本的标志,有两种方式:1.通过分支branch;2.通过标签tag。
       我们先看看结果:

//进入base版本库目录
$cd android-sdk-source
//显示所有的分支,包括远程和本地分支,我们没有建立分支,所有没有本地分支
$git branch -a
//显示所有标签
$git tag

      分别如下面二图:

 
图A git branch -a 
 
图B git tag

        从上面两张图中我们可以看到各个分支号和标签号,这是我们切换分支和检出标签的基础。关于两者的区别, 如果你只是下载的话,大家暂时不需要知道,branch是可以提交修改的,tag则只是作一个重要的标记,但是不能再修改标签对应的代码了。
       大家都知道android在2.3中开始添加了NFC,所以源代码中也会增加NFC目录,我们以此为基础,切换到2.3之前和之后的分支,比较一下。
       我们使用git checkout (branch)命令来检出分支,我们分别检出2.2和2.3版本的分支(同一目录下切换):
 
      得到的结果分别是:

图A froyo版本(android2.2)

图B gingerbread版本(2.3版本,姜饼)

      对比图A和图B,我们发现图B多了一个nfc目录,说明我们切换到了2.3版本。 
      检出标签也是一模一样的,比如git check android-sdk-2.1_r1 
      通过切换不同的分支,我们可以获取所有不同版本的SDK源代码,切换的速度还是很快的。

7.链接android.jar源码
      一般我们都喜欢下载各个版本的sdk源码,分别存放在各个版本的sources目录下,以便eclipse方法中android.jar对应链接。这种方法我就不多介绍。
      今天,我介绍另外一种方法让我们只需要一个简单的命令就能方便的切换源代码,呵呵,你是不是想到了,没错,就是使用前面的checkout命令切换。
      在工程的android.jar右键attach source,选择前面的android-sdk-source文件夹,

      链接完来后,就可查看SDK源代码了,如果版本不一致,我们只需要在android-sdk-source目录下执行git checkout branchname切换到相应的版本就OK了,再也不用找各个版本的源代码了。
     当然,两种方法各有长短,觉得哪种方便就用哪种好了,本人是linux环境,所以我选择后一种会更好。

8.小结
      源码下下来就是一笔财富,坚持查看源代码,分析其中的底层实现和框架模式,都绝对是极佳的学习经历,一定大有益处。
      后面有机会我可能会为大家分析下android源码的架构层次,编译自己的android系统,如何深度定制android等等,这个看时间安排和具体情况。
      不过有一个是可以肯定的,我在后面会单独开一个专题来剖析android源码:1.用源码来解说常见的东西;2.设计模式,敬请期待!