转自:http://www.zhihu.com/question/19759722

由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源码上花费了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行. 
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.

  • 知识
    • Java
      • Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
    • 熟练的Android App开发
    • Linux
      • Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
    • Make
      • AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
    • Git
      • AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
    • C++
      • Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).
  • 硬件
    • 流畅的国际网络
      • AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
    • 一台运行Ubuntu 12.04的PC.
      • 如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
    • 一台Nexus设备
      • AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
    • 高品质USB线
      • 要刷机时线坏了, 没有更窝心的事儿了.
  • 软件
    • Ubuntu 12.04
      • 官方推荐, 没得选.
    • Oracle Java 1.6
      • 注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
      • 安装:
        sudo apt-get install python-software-properties
        sudo add-apt-repository ppa:webupd8team/java
        sudo apt-get update
        sudo apt-get install oracle-java6-installer
        sudo apt-get install oracle-java6-set-default
    • Eclipse
      • 估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
        • 有语法分析 (快速准确的类, 方法跳转).
        • 支持C++ (IntelliJ的C++支持做的太慢了).
        • 嵌入了DDMS, View Hierarchy等调试工具.
      • 为了提高效率, 花5分钟背下常用快捷键非常非常值得.
      • 调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
    • Intellij IDEA
      • 开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
  • 巨人的肩膀
    • AOSP项目官方: https://source.android.com/source/index.html
      • 这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
    • Android官方Training: 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
      • 一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
  • 其它
    • 代码组织
      • AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
    • Binder
      • 这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
    • HAL
      • 除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
    • CyanogenMod
      • 这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
    • DIA
      • 这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
    • XDA
    • 想到了再补充.

[转]大牛们是怎么阅读 Android 系统源码的的更多相关文章

  1. 如何阅读Android系统源码-收藏必备

    对于任何一个对Android开发感兴趣的人而言,对于android系统的学习必不可少.而学习系统最佳的方法就如linus所言:"RTFSC"(Read The Fucking So ...

  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. django.db.utils.OperationalError: (1251, 'Client does not support authentication protocol requested by server; consider upgrading MySQL client')

    1.打开MySQL: cmd里 net start mysql mysql -hlocalhost -uroot -p回车 进入mysql数据库 2. 命令如下: 1.use mysql; 2.alt ...

  2. Python - Django - 静态文件相关

    静态文件的路径设置在 settings.py 中 如果该路径发生更改的话,html 中相关路径也要进行修改 CSS: <link href="/static/dashboard.css ...

  3. 一些Python中的二维数组的操作方法

    一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...

  4. Data - 数据思维 - 下篇

    9 - 数据解读与表达 数据解读 数据解读需要选择一个基点.一个参照系,单独的一个数值往往不具备价值,它只是数字. 注意点: 关注异常值,并深究WHY? 相互验证.大胆假设.多方验证. 把握趋势或者规 ...

  5. centos7下使用yum安装mysql5.7.10

    原文地址:http://www.mamicode.com/info-detail-503994.html CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql ...

  6. java端同时获取批量上传图片及其他数据

    Controller层: @ResponseBody @RequestMapping(value = "", method = RequestMethod.POST) public ...

  7. Hive 企业调优

    9.企业级调优 9.1 Fetch 抓取 Fetch 抓取:Hive 中对某些情况的查询可以不必使用 MapReduce 计算: hive.fetch.task.conversion:more 9.2 ...

  8. From 虚拟机模板 创建单节点K8S1.14.1的操作步骤

    半年前总结的 还是有记不住的地方... 1. 根据上一篇blog 自己创建了一个虚拟机 里面包含 k8s1.14.1 的k8s集群 这里简单说一下 虚拟机开机之后 如何处理以能够使用k8s 的简单过程 ...

  9. [转帖]Linux运维工程师的十个基本技能点

    Linux运维工程师的十个基本技能点 https://cloud.tencent.com/developer/article/1115068   本人是Linux运维工程师,对这方面有点心得,现在我说 ...

  10. [PDF] - 获取 RadioButtonList 控件值的方法

    背景 目标是通过 iTextSharp 读取 PDF 模板,填充内容后以生成新 PDF 文件.利用 福昕PDF编辑器个人版 可以获取到 RadioButtonList 的组名,但是获取不到每一个 Ra ...