获取 + 查看 Android 源码的 方法
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的源代码
via http://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/(国内需FQ),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 的类,包含如下代码:
好,再来看看 AdtPlugin.java:
最后来看看 AndroidConstants.java:
搞定!
解决方案 #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下使用。你可以根据自己的需求修改一下。
现在,当我再去查看Android SDK类的时候,可以看到源码了:
解决方案 #2
如果你实在不愿意把所有的Android源码拷贝到SDK目录里面去,也可以创建一个Eclispe User Library并把源码附加上去。
via http://stuffthathappens.com/blog/2008/11/01/browsing-android-source-in-eclipse/
-----------------------------------------------------------------------------------
这篇文章将教大家如何在Windows环境下下载Android源码,Android 自2007年11月5号发布以来,发展速度 如此之快,和它走开源的路是分不开的。我们在开发中有什么不明白不清楚的,直接把Android 源码下下来研 究就可以了,看源代码将会让你提升很快! 在这之前大家先熟悉俩个代码版本管理工具SVN,以及Git。 SVN(Windows环境下最常用的): svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件 都使用svn作为 代码版本管理软件。 Git: Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分 布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于 诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。 而Google Android的项目是基于Git进行版本管理的,所以经常在Linux环境下开发的人,就不用我多说了, 而大都数在Windows环境开发的人,就比较陌生了。那下面我就手把手教你如何在Windows环境下 Git Android源码。 第一步:Msysgit工具的下载(这个是Google为Windows环境下开发的Git客户端程序): http://code.google.com/p/msysgit/ 下载地址如图: 第二步:安装Msysgit软件(一直默认到底),如下图: 第三步:建立一个文件夹用来存放Git下来的Android 源码(我这里以G:/Android Src)为例,如下图: 第四步:右击Android Src文件夹选择Git Bash出现如下图所示: 第五步:查找我们要下载源代码的地址。Android的源代码是放在下面地址下: http://android.git.kernel.org/ 这里以Launcher为例,我们Ctrl + F查找:输入Launcher如下图所示: 点击链接进入另一个页面: 第六步在Git Bash端输入如下命令,命令格式(如上图图示) git clone git://android.git.kernel.org/platform/packages/apps/Launcher.git 在Receiving Objects: 100%时候,我们在G:/Android Src/文件夹下多一个工程Launcher,这正是我们所要的,如下图所示: Ok通过以上的步骤我们就把Android Launcher的源代码拿到手了,下面就剩下你研究了!
|
-----------------------------------------------------------------------------------
android提供的工具链和开发工具比较完善,因此它的开发环境的搭建比较简单,相信许多朋友都已经搭建好环境,并编写了HelloActivity入门程序了。这里先看几个问题:
1、android的文件系统结构是怎样的,我们安装的程序放在那里?
编译android源码之后,在out/target/product/generic一些文件:
ramdisk.img、system.img、userdata.img、 system、 data、root
其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。
ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。
模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。
2、android SDK和android源码能为我们提供什么工具?
android SDK提供有很多工具,如adb,ddms,emulator,aapt等,并提供kernel-qemu、ramdisk.img、 system.img、userdata.img。因此,只要有android SDK,我们就可以在模拟器上把android跑起来。
android源码可以编译出android SDK、adb等工具、android文件系统,以及ADT插件,也就是说,我们可以从android源码编译出所有android相关的东西。
3、 把android源码”make”之后会生成许多工具和android文件系统(system.img等),我们又可以使用“make sdk”来生成android SDK,android SDK也包括有工具和android文件系统(system.img等),而原来安装的时候我们也安装了android SDK,那么我们在开发时应该使用那些工具和android文件系统呢?
这个问题在后面回答。
4、官方推荐我们使用 eclipse+adt进入开发应用程序,我们的HelloActivity程序也是这里开发的。当我们把android源码/packages /apps/下的工程导入eclipse时,一般都会出现找不到包的错误。那么我们怎样修改、编译、调试android源码呢?Google又是用什么工 具来开发android的?
这个问题在后面回答。
下面系统地讲述android开发环境建立以及开发工具的使用
一、android SDK和eclipse的安装以及android开发环境建立
android工具链比较完善,需要外部的工具比较少。具体的安装过程可参考官方文档或<<android模拟器在ubuntu8.10的安装>>和<<android源码的编译>>。
这 里需要注意的是,用”make”来编译android源码时,我们可以使用JDK5或JDK6;用”make sdk”来编译时,会用到javadoc来生成文档,javadoc就必须使用JDK5的javadoc,否则编译是通不过的。因此,我们可以把JDK5 和JDK6都装上,然后只把javadoc和javadoc.1.gz指向JDK5相应的工具,其它工具还是用JDK6的。当然,我们可以只安装JDK5 或只用JDK5的工具。具体操作可以参考<<android源码的编译>>
二、使用eclipse来开发android源码
这里主要参考官方文档
https://sites.google.com/a/android.com/opensource/using-eclipse
下面,从官方文档总结出具体怎样用eclipse来开发android源码
1、建立基本的android开发环境
请参考官方文档或<<android模拟器在ubuntu8.10的安装>>
2、编译android源码
android源码根目录下通过make进行编译,请注意一些配置,具体可参考<<android源码的编译>>
3、把eclipse工程配置文件复制到android源码根目录下
cp development/ide/eclipse/.classpath ./
chmod u+w .classpath # Make the copy writable
4、修改eclipse程序的配置
1)、增大eclipse内存设置
把eclipse.ini(在eclipse软件的安装目录下)的3个值改为下面的值:
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
2)、把android-formatting.xml和android.importorder导入eclipse(可选)
android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下
android-formatting.xml用来配置eclipse编辑器的代码风格;android.importorder用来配置eclipse的import的顺序和结构。
在window->preferences->java->Code style->Formatter中导入android-formatting.xml
在window->preferences->java->Code style->Organize Imports中导入android.importorder
3)、安装anyedit插件(可选)
在http://andrei.gmxhome.de/anyedit/下载并导入eclipse中
5、把android源码作为一个工程导入eclipse
导入前先检查.classpath里的文件在android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹),.classpath里多余的路径可删除
新建Java Project(不是android project,否则会破坏android源码),选择从已存在的工程导入,工程名任意,完成。
导入时,eclipse要build工程,比较慢。导完后,一般都没有错误。
这里也就回答了第4个问题
6、eclipse上调试android里的程序。
为了不让其它版本的android工具和android文件系统影响下面的编译和调试,需要从环境变量中去除android工具和android文件系统的路径:
vim ~/.bashrc
看看有没有在PATH变量中加入android工具和android文件系统的路径,如果加有,则注释它。通过下面的方法,我们是不需要在.bashrc中添加android工具和android文件系统的路径的
执行:
cd android源码目录
. build/envsetup.sh #设了环境变量之后,会多出mmm等命令,可以通过输入help来查看
lunch 1 # 把emulator等工具和ramdisk.img等文件的路径对应起来,就可以直接调用emulator等工具,也解决了第3个问题
emulator &
ddms &
注意,先启动ddms,再启动eclipse,这样eclipse中就不会说端口冲突
然后在eclipse中配置调试类型和端口:
在Run->Debug Configurations->Remote java application上双击,然后,”Host:”设为localhost,”Port:”设为8800,”Connection Type”为Standard(Socket Attach)
然后“Apply”
注意,上面设置的端口要与DDMS中设置的端口一致,ADT插件使用了8700端口,因此上面设置的端口是8800。如果出现连不到VM的错误时,请注意,要先在DDMS中选中某一进程(对应某一应用程序),才能在eclipse执行 Debug。
在eclipse调试时,可以设断点、单步调试。估计google团队也是这样开发、调试android应用程序的
7、编译android源码
执行:
cd android源码目录
. build/envsetup.sh
那 么就会多出mm/mmm等命令,mm/mmm用来编译模块(包括C、C++、JAVA程序)。我们也可以直接在 android源码根目录下执行“make 模块名”来编译模块(模块名可以在.mk文件中找到)。模块编译后会在out/target/product/generic/system/app下生成对应的.apk包。但是,用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把 system文件夹打包为