对于任何一个对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. java23种设计模式之一: 单例模式(Singleton Pattern)

    单例模式(Singleton Pattern)是设计模式中比较常用的一种,下面来总结单例模式的知识,包括: 1.理解什么是单例模式.单例模式有什么优点/缺点.单例模式的应用场景: 2.再来看看Java ...

  2. Spark参数配置总结

  3. Windows下Apache2.2+PHP5安装步骤

    Windows下Apache2.2+PHP5安装 初学者在学习PHP的时候可能都会遇到安装Apache和PHP不成功的问题,于是很多开发者便选择了集成包,一键安装好Apache+PHP+MySQL.但 ...

  4. python学习一月总结_汇总大牛们的思想_值得收藏

    ''' 下面是我汇总的我学习一个月python(version:3.3.2)的所有笔记 你可以访问:http://www.python.org获取更多信息 你也可以访问:http://www.cnbl ...

  5. [转]jquery加载页面的方法(页面加载完成就执行)

    jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别.   1.$(function(){ $("#a&q ...

  6. Educational Codeforces Round 12 B. Shopping 暴力

    B. Shopping 题目连接: http://www.codeforces.com/contest/665/problem/B Description Ayush is a cashier at ...

  7. 模板引擎之hogan.js

    hogan.js 语法简单,且支持循环数据: 基本语法: 1. 标签可以嵌套使用 2. {{data}} 转义的变量,不会渲染html标签 3. {{{data}}} 不转义的变量,会渲染html标签 ...

  8. objectiveC【语法】修饰符 static extern const

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

  9. HDU 4690 EBCDIC (2013多校 1005题 胡搞题)

    EBCDIC Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Su ...

  10. WICED -- Wireless Internet Connectivity for Embedded Devices

    Broadcom's Wireless Internet Connectivity for Embedded Devices (WICED™) platform (pronounced "w ...