对于任何一个对Android开发感兴趣的人而言,对于android系统的学习必不可少。而学习系统最佳的方法就如linus所言:"RTFSC"(Read The Fucking Source Code)。
下面从知乎整理了一些优质回答,以飨读者。

巨人的肩膀

  • AOSP项目官方: https://source.android.com/source/index.html
    这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.

  • Android官方手册: https://developer.android.com/training/index.html
    这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.

  • 老罗的Android之旅: http://blog.csdn.net/luoshengyang
    此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
    早期的博客是基于旧版本的Android;
    大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.

  • Innost的专栏: http://blog.csdn.net/innost
    邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.

  • Android Issues: http://code.google.com/p/android/issues/list
    Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.

  • Google: https://www.google.com
    一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.

阅读方法

假设我想研究Android的UI系统,首先要找什么和UI有亲戚关系吧!
View大神跳出来了,沿着它往下找找看,发现它在贴图在画各种形状,但是它在哪里画呢,马良也要纸吧?
开发Android的同学逃不掉Activity吧!它有个setcontentview()的方法,从这个名字看好像它是把view和activity结合的地方。赶紧看它的实现和被调用,然后我们就发现了WindowViewRootWindowManager的身影,沿着WM和WMS我们就惊喜会发现了Surface,以及draw的函数,它居然在一个DeCorView上画东西哈。借助Source Insight, UIJava层的横向静态图呼之欲出了。
完成这个静态UML,我觉得我可以开始功能实现上追踪了,这部分主要是C++的代码(这也是我坚定劝阻的放弃Eclipse的原因),我沿着draw函数,看到了各个层级的关系,SurfaceSession的控制和事务处理,SharedBuffer读写控制,彪悍的SurfaceFlinger主宰一切,OpenGL ES的神笔马良。FrameBufferFrameBufferDevice的图像输出,LCD设备打开后,开始接收FBD发过来的一帧帧图像,神奇吧。
好吧,就这样,再往底层我爱莫能助了!

软件

当我决定要阅读源码,要具备一款好用的阅读器、下载源码等

  • Windows阅读器: Source Insight

    在这个工具帮助下,你才可以驾驭巨大数量的Android 源码,你可以从容在Java,C++,C代码间遨游,你可以很快找到你需要的继承和调用关系。

  • Mac OS阅读器: Understand,

    参考:OS X 下真怀念 Source Insight

  • 源码下载:
    如果你有梯子:
    官方下载
    git路径
    如果没有:
    github路径 (可以直接download zip或者使用git clone)

    欢迎读者提供优质下载路径(镜像等)来共享

相关知识

  • Java
    Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
    熟练的Android App开发
  • Linux
    Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
  • 设计模式
    去学习一下,android系统里的代码很多地方都闪烁着设计模式的光芒,这也是你成为大牛的必经之路.当然你只要先了解一下,在阅读中慢慢感受就行。
  • Make
    AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
  • Git
    AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
  • C++
    Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).

感谢知乎及知乎er

大牛们是怎么阅读 Android 系统源码的?

彩蛋

最后,很多优秀资源来源于国外,如果android学习者连android官网都打不开的话,那就有点。。。
关于vpn要委婉吐槽一句:

与其像本人以前一样花一大堆时间去搜索各种不稳定的免费vpn,还真心不如花个十几块钱省一个月心来的实在。学习技术总要支付学费,但购买优质vpn这点个人觉得是性价比极高也极机智的做法。

关于作者

欢迎关注本人的Github https://github.com/wingjay, 及阅读本人相关文章
《如何在一天之内完成一款具备cool属性的Android产品<简诗>》

文/iam_wingjay(简书作者)
原文链接:http://www.jianshu.com/p/b3580904d298
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

如何阅读Android系统源码-收藏必备的更多相关文章

  1. [转]大牛们是怎么阅读 Android 系统源码的

    转自:http://www.zhihu.com/question/19759722 由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源 ...

  2. 你们都是怎么阅读android系统源码的,用什么工具?

    如果是eclipse,可以建立java或者c++工程,把framework源码导入.packages目录下的可以建立android工程.sourceinsight的话,建立工程把相应模块的代码添加进去 ...

  3. [Android] osx下如何使用SublimeText阅读Android系统源码

    reference to : http://www.jianshu.com/p/c295d2729ecf 平时使用Sublimetext都是打开单个文件,这次要导入几万个文件,这在一些ide中称为pr ...

  4. 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介

    前言        古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...

  5. FW 编译Android系统源码和内核源码

    编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现 ...

  6. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  7. Android系统源码目录

    Android系统源码目录 我们要先了解Android系统源码目录,为后期源码学习打下基础.关于源码的阅读,你可以访问http://androidxref.com/来阅读系统源码.当然,最好是将源码下 ...

  8. Android FrameWork学习(二)Android系统源码调试

    通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天 ...

  9. 将Android系统源码导入ecplise

    Android系统源码中带有个IDE的配置文件,目录为:development/ide/ 如果要用eclipse导入查看系统源码,则将development/ide/eclipse/.classpat ...

随机推荐

  1. 课堂实验-Bag

    这次的课堂实验比较简单,但尴尬的是竟然没有做出来,自己的代码能力下降了不少.IDEA的Junit测试出了问题.所以这次实验是和结对伙伴结对编程写的. public class Bag<T> ...

  2. Makefile-函数patsubst

    比方说你在makefile里定义了一个变量,内容是一堆 .c 文件的的名字,如 SRC = aaa.c bbb.c my.c his.c你可以用 patsubst 根据某种模式,将这些名字改成另外的, ...

  3. scrapy--将爬取得数据保存到数据库中

    首先要做的: 建库 article 建表 article 在cmd中的工作环境中安装mysql的驱动 mysqlclient pip install mysqlclient #如果是使用centos ...

  4. PAT甲级1095. Cars on Campus

    PAT甲级1095. Cars on Campus 题意: 浙江大学有6个校区和很多门.从每个门口,我们可以收集穿过大门的汽车的进/出时间和车牌号码.现在有了所有的信息,你应该在任何特定的时间点告诉在 ...

  5. Qt on android 蓝牙开发(控制小车)

    因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...

  6. MAC 版本 phpstorm 配置 theme

    mac 版本的配置文件在:./Library/Preferences/WebIde70/colors/ 将文件复制到这个目录中,然后phpStorm设置中,IDE设置->editor->f ...

  7. DAC calibrates 4- to 20-mA output current

    Industrial controls make heavy use of 4- to 20-mA current loops to transmit process measurements bec ...

  8. Configuring spartan 6 using mcu and spi flash

    http://forums.xilinx.com/t5/General-Technical-Discussion/Configuring-spartan-6-using-mcu-and-spi-fla ...

  9. Druid 配置_配置WebStatFilter

    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter WebStatFilt ...

  10. SQL Server需要监控哪些计数器 ---指尖流淌

    http://www.cnblogs.com/zhijianliutang/p/4174697.html