方法一:
线上阅读

方法二:本地阅读

一.获取源码
通过Git去官网下载Android源码。

步骤1:

git clone http://android.googlesource.com/platform/frameworks/base.git

步骤2:

git basels -l

步骤3:

git tag     //查看发行版本
http://img.blog.csdn.net/20131224194006609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZzB6aGFvdGFp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

步骤4:

git checkout android-4.4_r1

这样我们就得到了Android4.4的源码。

但是我再下6.0.1的时候出现了两个文件名字忽略大小写相同的情况,就导致了有个文件丢失了,本地代码有修改,怎么也checkout 6.0的情况。于是我就去网上随便找了个6.0的源码,推荐个网盘地址。

网上大部分还是推荐使用Ubantu环境来看搞android和看源码的,资料也比较多,但是个人电脑并不是很想刷。

步骤5:

如果你只想下载部分源代码(例如Launcher)可以执行以下命令:

git clone http://android.googlesource.com/platform/packages/apps/Launcher.git
http://img.blog.csdn.net/20131224200022109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZzB6aGFvdGFp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

所有代码下载的列表

git clone http://android.git.kernel.org/kernel/common.git  git clone http://android.googlesource.com/platform/external/webkit.git  git clone http://android.googlesource.com/platform/development.git  git clone http://android.googlesource.com/platform/system/bluetooth.git  git clone http://android.googlesource.com/platform/external/freetype.git  git clone http://android.googlesource.com/platform/system/vold.git  git clone http://android.googlesource.com/platform/system/extras.git  git clone http://android.googlesource.com/platform/system/core.git  git clone http://android.googlesource.com/platform/frameworks/ex.git  git clone http://android.googlesource.com/platform/system/media.git  git clone http://android.googlesource.com/platform/frameworks/base.git  git clone http://android.googlesource.com/platform/system/netd.git  git clone http://android.googlesource.com/platform/packages/apps/AlarmClock.git  git clone http://android.googlesource.com/platform/packages/apps/Nfc.git  git clone http://android.googlesource.com/platform/system/wlan/ti.git  git clone http://android.googlesource.com/platform/packages/providers/ImProvider.git  git clone http://android.googlesource.com/platform/packages/apps/CertInstaller.git  git clone http://android.googlesource.com/platform/packages/apps/Tag.git  git clone http://android.googlesource.com/platform/packages/providers/TelephonyProvider.git  git clone http://android.googlesource.com/platform/hardware/qcom/media.git  git clone http://android.googlesource.com/platform/packages/providers/WebSearchProvider.git  git clone http://android.googlesource.com/platform/frameworks/opt/carddav.git  git clone http://android.googlesource.com/toolchain/manifest.git  git clone http://android.googlesource.com/toolchain/mpc.git  git clone http://android.googlesource.com/toolchain/build.git  git clone http://android.googlesource.com/device/sample.git  git clone http://android.googlesource.com/toolchain/gmp.git  git clone http://android.googlesource.com/toolchain/gold.git  git clone http://android.googlesource.com/toolchain/gcc.git  git clone http://android.googlesource.com/toolchain/mpfr.git  git clone http://android.googlesource.com/toolchain/benchmark.git  git clone http://android.googlesource.com/toolchain/gdb.git  git clone http://android.googlesource.com/kernel/omap.git  git clone http://android.googlesource.com/platform/packages/apps/Sync.git  git clone http://android.googlesource.com/platform/prebuilt.git  git clone http://android.googlesource.com/platform/dalvik.git  git clone  git clone http://android.googlesource.com/platform/external/tinyxml.git  git clone http://android.googlesource.com/platform/external/srec.git  git clone http://android.googlesource.com/platform/external/neven.git  git clone http://android.googlesource.com/platform/external/dhcpcd.git  git clone http://android.googlesource.com/platform/external/skia.git  git clone http://android.googlesource.com/platform/external/clearsilver.git  git clone http://android.googlesource.com/platform/external/elfutils.git  git clone http://android.googlesource.com/platform/hardware/ril.git  git clone http://android.googlesource.com/platform/external/icu4c.git  git clone http://android.googlesource.com/platform/external/netperf.git  git clone http://android.googlesource.com/platform/external/sqlite.git  git clone http://android.googlesource.com/platform/external/ping.git  git clone http://android.googlesource.com/platform/external/googleclient.git  git clone http://android.googlesource.com/platform/external/tremor.git  git clone http://android.googlesource.com/platform/packages/apps/Settings.git  git clone http://android.googlesource.com/platform/packages/providers/MediaProvider.git  git clone http://android.googlesource.com/platform/packages/apps/Email.git  git clone http://android.googlesource.com/platform/packages/providers/ContactsProvider.git  git clone http://android.googlesource.com/platform/packages/apps/Contacts.git  git clone http://android.googlesource.com/platform/packages/apps/Updater.git  git clone http://android.googlesource.com/platform/packages/apps/Stk.git  git clone http://android.googlesource.com/platform/packages/apps/Camera.git  git clone http://android.googlesource.com/platform/packages/apps/Launcher.git  git clone http://android.googlesource.com/platform/external/safe-iop.git  git clone http://android.googlesource.com/platform/packages/providers/DrmProvider.git  git clone http://android.googlesource.com/platform/external/bluetooth/bluez.git  git clone http://android.googlesource.com/platform/packages/apps/Mms.git  git clone http://android.googlesource.com/platform/packages/apps/Browser.git  git clone http://android.googlesource.com/platform/packages/providers/CalendarProvider.git  git clone http://android.googlesource.com/platform/packages/apps/Calculator.git  git clone http://android.googlesource.com/platform/frameworks/opt/com.google.android.git  git clone http://android.googlesource.com/platform/packages/apps/AccountsAndSyncSettings.git  git clone http://android.googlesource.com/platform/packages/apps/HTMLViewer.git  git clone http://android.googlesource.com/platform/packages/apps/GlobalSearch.git  git clone http://android.googlesource.com/platform/packages/providers/ManagementProvider.git  git clone http://android.googlesource.com/platform/packages/apps/PackageInstaller.git  git clone http://android.googlesource.com/platform/packages/providers/UserDictionaryProvider.git  git clone http://android.googlesource.com/platform/packages/apps/Provision.git  git clone http://android.googlesource.com/platform/packages/apps/Gallery3D.git  git clone http://android.googlesource.com/platform/frameworks/opt/emoji.git  git clone http://android.googlesource.com/platform/packages/apps/Phone.git  git clone http://android.googlesource.com/platform/packages/apps/Gallery.git  git clone http://android.googlesource.com/platform/external/svox.git  git clone http://android.googlesource.com/platform/system/vold.git  git clone http://android.googlesource.com/platform/system/wlan/ti.git  git clone http://android.googlesource.com/platform/packages/providers/ImProvider.git  git clone http://android.googlesource.com/platform/packages/providers/GoogleSubscribedFeedsProvider.git  git clone http://android.googlesource.com/platform/packages/apps/Launcher2.git  git clone http://android.googlesource.com/platform/packages/providers/DownloadProvider.git  git clone http://android.googlesource.com/platform/packages/apps/DeskClock.git  git clone http://android.googlesource.com/platform/packages/apps/SoundRecorder.git  git clone http://android.googlesource.com/platform/packages/apps/Protips.git  git clone http://android.googlesource.com/platform/packages/apps/Stk.git  git clone http://android.googlesource.com/platform/packages/apps/SpeechRecorder.git  git clone http://android.googlesource.com/platform/packages/apps/Music.git  git clone http://android.googlesource.com/platform/packages/apps/VoiceDialer.git  git clone http://android.googlesource.com/platform/packages/providers/GoogleContactsProvider.git  git clone http://android.googlesource.com/platform/packages/apps/IM.git  git clone http://android.googlesource.com/platform/packages/apps/QuickSearchBox.git  git clone http://android.googlesource.com/platform/packages/apps/GoogleSearch.git  git clone http://android.googlesource.com/platform/packages/providers/ApplicationsProvider.git  git clone http://android.googlesource.com/platform/frameworks/opt/com.google.android.googlelogin.git  

二 使用Source InSight 阅读 Android 源码

步骤1: 安装 Source Insight
– 下载地址 : http://www.sourceinsight.com/down35.html;
– 注册码 : SI3US-361500-17409 .

步骤2:导入 Android 源码
– 创建工程 : Project -> New Project, 输入一个工程名, 文件路径设置为 Android 源码路径, 这个一定要注意, 否则会拷贝整个 Android 源码。

– 设置工程 : 默认即可;

– 导入源码 : 选择全部导入, 前提是电脑配置好, 如果电脑配置一般, 可以一个一个导入.

– 选择导入子目录 : 不仅导入目录, 子目录迭代导入.

– 扫描源码文件 :

– 扫描完成 : 只有 22万个文件.

– 开始导入 :

步骤3:查找阅读源码
– 查找 IBinder 源码 :

Source Insight 参考快捷键 : http://www.cnblogs.com/mengdd/p/3506526.html.

三 怎样阅读源码

官网架构基础

1.怎么入手

a.宏观上看,Android源码分为功能实现上的纵向,和功能拓展上的横向。在阅读源码时需要把握好着两个思路。譬如你需要研究音频系统的实现原理,纵向:你需要从一个音乐的开始播放追踪,一路下来,你发现解码库的调用,共享内存的创建和使用,路由的切换,音频输入设备的开启,音频流的开始。譬如你要看音频系统包括哪些内容,横向:通过Framework的接口,你会发现,音频系统主要包括:放音,录音,路由切换,音效处理等。

b.Android的功能模块绝大部分是C/S架构你心里一定需要有这个层级关系,你需要思路清晰地找到Server的位置,它才是你需要攻破的城,上面的libraries是不是很亲切的样子?看完它长成啥样后,然后你才能发现HAL和Kernel一层层地剥离。很多研究源码的同学兜兜转转,始终在JAVA层上,这是不科学的,要知道libraries才是它的精髓啊。

c.Android的底层是Linux Kernel。在理解1,2后,还是需要对Kernel部分有个简单的理解,起码你要熟悉kernel的基础协议吧!你要能看懂电路图吧!你要熟悉设备的开启和关闭吧!你要熟悉调寄存器了吧!这方面的书太多了,我建议根据实例去阅读,它并不复杂,不需要一本本厚书来铺垫。在libraries和kernel间,可能还会有个HAL的东东,其实它是对kernel层的封装,方便各个硬件的接口统一。这样,如果我换个硬件,不用跑了长得很复杂的libraries里面改了,kernel调试好了后,改改HAL就好了。

2.阅读方法:

a.分层次阅读  

在阅读代码的时候不要一头就扎下去,这样往往容易只见树木不见森林,阅读代码比较好的方法有一点象二叉树的广度优先的遍历。在程序主体一般会比较简 单,调用的函数会比较少,根据函数的名字以及层次关系一般可以确定每一个函数的大致用途,将你的理解作为注解写在这些函数的边上。当然很难一次就将全部注 解都写正确,有时候甚至可能是你猜测的结果,不过没有关系这些注解在阅读过程是不断修正的,直到你全部理解了代码为止。一般来说采用逐层阅读的方法可以是 你系统的理解保持在一个正确的方向上。避免一下子扎入到细节的问题上。在分层次阅读的时候要注意一个问题,就是将系统的函数和开发人员编写代码区分开。在 c, c++,java ,delphi中都有自己的系统函数,不要去阅读这些系统函数,除非你要学习他们的编程方法,否则只会浪费你的时间。将系统函数表示出来,注明它们的作用 即可,区分系统函数和自编函数有几个方法,一个是系统函数的编程风格一般会比较好,而自编的函数的编程风格一般比较会比较差。从变量名、行之间的缩进、注 解等方面一般可以分辨出来,另外一个是象ms c6++会在你编程的时候给你生成一大堆文件出来,其中有很多文件是你用不到了,可以根据文件名来区分一下时候是系统函数,最后如果你实在确定不了,那就 用开发系统的帮助系统去查一下函数名,对一下参数等来确定即可。

b.写注解   
 
 写注解是在阅读代码中最重要的一个步骤,在我们阅读的源代码一般来说是我们不熟悉的系统,阅读别人的代码一般会有几个问题,1搞明白别人的编程思想不 是一件很容易的事情,即使你知道这段程序的思路的时候也是一样。2阅读代码的时候代码量一般会比较大,如果不及时写注解往往会造成读明白了后边忘了前边的 现象。3阅读代码的时候难免会出现理解错误,如果没有及时的写注解很难及时的发现这些错误。4不写注解有时候你发生你很难确定一个函数你时候阅读过,它的功能是什么,经常会发生重复阅读、理解的现象。

c.重复阅读 

一次就可以将所有的代码都阅读明白的人是没有的。至少我还没有遇到过。反复的去阅读同一段代码有助于得代码的理解。一般来说,在第一次阅读代码的时候 你可以跳过很多一时不明白的代码段,只写一些简单的注解,在以后的重复阅读过程用,你对代码的理解会比上一次理解的更深刻,这样你可以修改那些注解错误的 地方和上一次没有理解的对方。一般来说,对代码阅读3,4次基本可以理解代码的含义和作用。 

d.运行并修改代码 
  
  如果你的代码是可运行的,那么先让它运行起来,用单步跟踪的方法来阅读代码,会提高你的代码速度。代码通过看中间变量了解代码的含义,而且对 以后的修改会提供很大的帮助  用自己的代码代替原有代码,看效果,但在之前要保留源代码  600行的一个函数,阅读起来很困难,编程的人不是一个好的习惯。在阅读这个代码的时候将代码进行修改,变成了14个函数。每一个大约是40-50 行左右.

参考资料:
http://blog.csdn.net/deng0zhaotai/article/details/17512515
http://blog.csdn.net/shulianghan/article/details/50553001
https://www.zhihu.com/question/19759722
https://source.android.com/devices/graphics/

更多相关文章

  1. C语言函数的递归(上)
  2. Eclipse,到了说再见的时候了——Android(安卓)Studio最全解析
  3. Android中的HTTP通信
  4. Android(安卓)sqlit java层源码分析
  5. 【代码】android通过criteria选择合适的地理位置服务
  6. android 调用系统计算器 实例
  7. android 恢复出厂设置流程
  8. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawa
  9. Android注解——Butter Knife的使用

随机推荐

  1. android UI 优化系列之 创建RGB565的缓存
  2. Android(安卓)Notes(06) - Touch事件分发
  3. android studio logcat 打印不出信息
  4. [Android] - 官方轉換dp, sp 至 pixel的
  5. 如何打log 检查 Android(安卓)CTS failur
  6. PendingIntent实现原理和代码
  7. Android崩溃
  8. Android中Http网络请求库Asnyc-http的使
  9. Android(安卓)内存溢出(Out Of Memory)
  10. Android(安卓)30月入门到精通(6) Android(