当前位置 博文首页 > whotodo:获取 + 查看 Android 源码的 方法

    whotodo:获取 + 查看 Android 源码的 方法

    作者:[db:作者] 时间:2021-06-14 12:45

    -----------------------------------------------------------------------------------

    Android源码获取方法。

    作为一个Android开发者,必要的时候阅读以下源码可以拓宽一下自己的视野和对android的认知程度。

    Google的Android的源码管理仓库是用的是Git。Android是一个开源手机终端系统,基于Linux内核的。

    1、下载一个Git客户端,我使用的是Git-1.7.0.2版本

    下载地址:http://code.google.com/p/msysgit/

    2、windows下安装Git的客户端软件很方便,和普通软件一样。安装完成后,我们在电脑上建立一个文件夹,用来存放我们将要下载的源码。比如:在D盘上简历一个android source文件夹。

    我们在android source文件夹上右击鼠标,选中Git Bash选项,会打开一个窗口命令,类似CMD命令窗口。

    命令窗口如下:

    3、完成到此处,我们基本完成一半了。接下来我们来看看android的源码地址。

    源码地址:http://android.git.kernel.org/

    浏览器打开此URL地址,可以看到

    该地址首页即告诉你如何下载源码:

    git clone git://android.git.kernel.org/+工程模块的相对路径。

    例如:我想下载platform/packages/apps/Launcher.git这个模块。

    那么完整URL为:

    git clone git://android.git.kernel.org/platform/packages/apps/Launcher.git


    即在第三步打开的命令窗口输入如上完成url按回车即可,会将此模块源码下载在你的android source文件夹下。

    下载完成后,去你的目标文件夹android source下看看,就会有你想要的源码。

    截止到这里。windows下获取android源码的方法就结束了。

    接下来我们看看在Linux下如何获取呢?

    我使用的是Ubuntu10.4,你也可以使用SuSE,RedHat。说实话,我也是看到很多android在Ubuntu下编译才装的。本人之前使用的一直是RedHat和SuSE.不熟悉Linux的朋友可以先在VM上安装RedHat试试,很容易上手。SuSE部分版本在VM上显示画面有问题,SuSE还是很强大的,之前做J2EE常用。

    回到正题Android上来。

    在Ubuntu 10.4上安装Git只要设定了正确的更新源,然后使用apt-get就可以了,有什么依赖问题,就让它自己解决吧。其中curl是一个利用URL语法在命令行下工作的文件传输工具。

    在Ubuntu Linux中打开终端命令窗口输入:sudo apt-get install git-core curl


    Git会自动更新它需要的组件和依赖包,安装完成之后。同理简历一个目录,例如:android,

    更改权限:chmod 777 /android

    读写权限都附上。

    输入的命令和windows下的命令窗口一样,如果想获取platform/packages/apps/Launcher.git这个模块源码,

    输入如下命令:

    git clone git://android.git.kernel.org/platform/packages/apps/Launcher.git


    这些都是同一个道理。下载完成如下:


    如果要全部下载下来,也是一样。获取platform/manifest.git即可。


    ---------------------------------------------------------------------

    在Eclipse中查看Android SDK的源代码

    viahttp://stuffthathappens.com/blog/2008/11/01/browsing-android-source-in-eclipse/

    Google的Android SDK中包含一个android.jar文件,里面有Android所有的公开类的API接口。同时,Google还提供了一个Eclipse插件,可以很容易的开始进行开发。但是,这里并没有一个类似于androidSrc.jar的文件,因此当我们试图在Eclipse去查看Android SDK的源代码的时候,会得到下面这样的一个页面:

    Google已经发布了Android所有的源代码,很大。要在Eclipse中查看Android的源代码,需要去http://source.android.com/(国内需),Get Source那个页面内按照指示一步步的将所有的东西都通过Git弄下来。很值得抽出一个晚上的时间来做这件事,因为如果能够随时查看源码,对于理解SDK如何工作的是非常有帮助的。

    链接到Eclipse

    现在我们有了源码,应该可以告诉Eclipse如何找到它了。右键点击android.jar——属性,可是却发现了这样的信息:

    嗯....那段话的大意是,当前的class path的设置属于'Android Library',不允许用户修改。好吧,只能去看看ADT的源码了,看能否找到什么办法。

    查看ADT源码

    当下载完Android源码之后,我们已经得到了所有内容,包括:操作系统、Dalvik虚拟机、Eclipse插件、公开的SDK...等等。

    在 com.android.ide.eclipse.adt.project.internal 包里,我找到一个名为AndroidClassspathContainerInitializer.java 的类,包含如下代码:

    IPath android_src = new Path(AdtPlugin.getOsAbsoluteAndroidSources());

    好,再来看看AdtPlugin.java:

    /** Returns the absolute android sources path in the sdk */
    public static String getOsAbsoluteAndroidSources() {
    return getOsSdkFolder() + getOsRelativeAndroidSources();
    }
    
    /** Returns the android sources path relative to the sdk folder */
    public static String getOsRelativeAndroidSources() {
    return AndroidConstants.FD_ANDROID_SOURCES;
    }

    最后来看看AndroidConstants.java:

    public static final String FD_ANDROID_SOURCES = "sources";

    搞定!

    解决方案 #1

    根据上面的分析,我们可以在android SDK的安装目录内创建一个sources目录,与android.jar位于同一个目录内。之后,我们可以在之前下好的Android源码中找到所有我们需要的代码。SDK的代码在frameworks/base/core/java,在这个目录下有一个android目录,我们需要将这个目录拷贝(链接)到SDK安装目录中的sources目录。你可能需要想想办法,把所有分散在不同Component的源码都弄到一起去。最终我们的目录结构大致如下:

    SDK_PATH
      |-- android.jar
      +--docs/...
      +--samples/...
      +--sources
           +--android
           |      ...accounts, annotation, app, bluetooth, etc...
           +--com/android/etc...
           +--dalvik/...
           +--java/...
           +--javax/...

    我把所有这样的目录都弄进来了,但是没有详细记录。


    注:上面的代码是适用于以前的老版本的ADT,目前最新版本的ADT已经不适用了。经过查看源代码发现,最新版本的ADT需要在SDK目录下的platformsandroid-X对应的目录下建立sources目录,其中X是3、4、7、8之一的数字,对应不同的SDK版本。这也是一个比较合理的方案,毕竟不同版本的SDK的源码还是不一样的。

    再注:(也就是我http://log4think.com),我自己写了一个脚本来做这个事情。这个脚本会从Android的源码目录中搜索并提取出分布在不同目录下的源代码,并按照package名字的目录结构重新组织。这里说的“Android的源码目录”指的是从source.android.com上面,使用repo
    sync同步下来的代码库。

    如果你在Linux或者Mac下工作,sources的源码目录结构可以用我写的如下的一个Shell脚本来完成这个事情,在Android的源码目录下运行这个脚本,然后会在~/workspace/src-tree创建"几乎"所有Java源码的soft symbol link。之后也可以用tar带-h参数打包到windows下使用。你可以根据自己的需求修改一下。

    
          
           #!/bin/bash