[转]如何阅读android framework源码
- 知识
- 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
- http://www.xda-developers.com/
- 这里有最新资讯和最有趣的论坛.
- 想到了再补充.
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:王宇龙 链接:http://www.zhihu.com/question/19759722/answer/29213925 来源:知乎
[转]如何阅读android framework源码的更多相关文章
- 如何阅读android framework源码
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结. 知识 Java Java是AOSP的主要语言之一. 没得说, 必需熟练掌握. 熟练的Android App开发 Linux A ...
- 如何阅读Android系统源码-收藏必备
对于任何一个对Android开发感兴趣的人而言,对于android系统的学习必不可少.而学习系统最佳的方法就如linus所言:"RTFSC"(Read The Fucking So ...
- Android 快速下载 Android framework 源码
官网 Android framework源码git地址 github: https://github.com/android/platform_frameworks_base google 官方: h ...
- Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
一.下载framework源码: google已经把framework源码托管在了gitHub上: https://github.com/android/platform_frameworks_bas ...
- 你们都是怎么阅读android系统源码的,用什么工具?
如果是eclipse,可以建立java或者c++工程,把framework源码导入.packages目录下的可以建立android工程.sourceinsight的话,建立工程把相应模块的代码添加进去 ...
- [转]大牛们是怎么阅读 Android 系统源码的
转自:http://www.zhihu.com/question/19759722 由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源 ...
- 阅读android项目源码
版权声明:欢迎转载,转载请注明出处;http://blog.csdn.net/angcyo 上一篇,我们成功导入并运行了 贝壳单词 项目. 这篇文章, 带大家一起读一读源码. 打开 贝壳单词 项目,定 ...
- Android Framework源码反编译
部分设备crash在Framework代码,但又和开源代码对应不上,这时需要拉取设备里面的Framework并反编译源代码排查问题. 1.获取Framework文件: adb pull /system ...
- [Android] osx下如何使用SublimeText阅读Android系统源码
reference to : http://www.jianshu.com/p/c295d2729ecf 平时使用Sublimetext都是打开单个文件,这次要导入几万个文件,这在一些ide中称为pr ...
随机推荐
- 转 pygame学习笔记(1)——安装及矩形、圆型画图
http://www.cnblogs.com/xiaowuyi/archive/2012/06/06/2538921.html
- Kali linux 2016.2(Rolling)里的应用更新和配置额外安全工具
写在前面的话 你去打人家 ,你不伪装一下,化化妆 ,穿上盔甲,难道你傻逼一样的 拿着棍子就去打人家,人家 一眼不认出你是谁了.做坏事要伪装好自己 ,要把自己藏起来 ,让别人找不到你,你以为网络公 ...
- Hadoop YARN学习之重要术语总结(6)
Hadoop YARN学习之重要术语总结(6) - SLA服务等级 - RM(ResourceManager) - AM(ApplicationMaster) - NM(NodeMaster) - M ...
- Retrofit2.0动态url遇到的坑
1.今天在升级基于RxJava2+Retrofit+RxCache的网络请求封装这套框架的过程中遇到一个问题,当我使用Post动态传入url时,服务器一直返回http404 ,我的请求地址末端是这样的 ...
- Toolbar自定义布局
Toolbar如何使用想必大家清楚地很,实际开发中标题栏的样式各色各样,因此其基本样式便不能满足我们的需求,这就需要我们自定义布局.打开ToolBar源码我们发现它继承ViewGroup,这就表示我们 ...
- Node.js——网站访问一般流程
- Farseer.net轻量级ORM开源框架 V1.5版本升级消息
SHA-1: 0ede88104f269f108b68be1e87ffcead4a354ec6 * 提交V1.5版本1.新增:整表缓存的实现方式(提取接口,可由客户端算定义实现)2.新增:SQL配置化 ...
- CAD插入背景图片(网页版)
把图片作为背景图片可见但是不能编辑操作. 主要用到函数说明: _DMxDrawX::DrawImageToBackground 绘光栅图到背景.详细说明如下: 参数 说明 BSTR sFileName ...
- vc++实现控制USB设备启用与否
#include <WINDOWS.H> #include <TCHAR.H> #include <SETUPAPI.H> //#in ...
- 给SVN控制的项目添加忽略文件/文件夹
忽略目录其实有些像建立一个文件夹,但却不放入版本控制.如果不加入版本控制又会在svn status命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化 未加入控制的文件 ...