源码mirror地址:
aosp-mirror: https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core
在线查看源码AndroidXRef地址:http://androidxref.com/
例如:5.1.0_r1
http://androidxref.com/5.1.0_r1/xref/
如果想复制Android源码到windows上查看,需要开启大小写敏感。因为Android源码中文件中有同名,但是大小写不一致,例如ec.cpp和EC.cpp。linux下面文件名区分大小写,而windows上文件名不区分大小写,将Android源码从Ubuntu中复制到Windows上时候会提醒XX文件已存在。
Eclipse中添加Android系统jar包
用途是,可以使用Eclipse开发系统应用了,这样可以调用系统中才使用的API.
1.首先在项目中右击->属性。如图所示依次操作
2.添加User Library
3.第一次要新建User Library名字
注:一定要勾选上System library(addedto the boot class path)否则会出现错误1。
4.添加jar包
2.${ANDROID_SOURCE}/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
这个4.2.2_lib已经保存下来了,以后有新的工程需要这里的jar包,直接将4.2.2_lib添加进去就可以直接使用了。
将4.2.2_lib移至最上面。
完成。
错误1:(一个半小时的教训)
Unable to execute dex: Java heap space Java heap space.
转自:https://blog.csdn.net/kangear/article/details/38341765
--------------------------------------------------分割线--------------------------------------------------
研究源码的第一步,肯定是要有源码开发调试环境
基本条件:
- 有一个nexus手机
- 有一个ubuntu14.4环境的电脑,或虚拟机。 (你所遇到的问题最少,如果你有信心能hold住很多问题,你也可以用OS X)
- 选择一个好的梯子
- 下载源码https://source.android.com/source/initializing.html
- 编译源码https://source.android.com/source/building.html
- 刷机到nexus
这个第一步,你会经历很多问题。在你尝试解决,并成功解决后,会为你后续学习打下基础。
你也会明白,源码难,不光是源码本书的庞杂,更是因为需要雄厚的的知识体系作为基础,不然只能浮光掠影的看看基础而已
研究源码的第二步,可以选一些简单的原生app练手
比如launcher,比如Calendar
不要看比较繁杂的Contacts、Gallery、Phone、MMS
可以熟悉google的java风格,了解编译方式。顺道看看Android.mk相关的原理
build目录下的envsetup写的不要太牛逼
研究源码第三部,就可以深入java层的Framework的某一个部分了
从自己熟悉的、感兴趣的东西看起。
比如binder、比如window、比如android启动过程
binder比较推荐,虽然复杂,但是独立,跟后续的步骤可以串起来。
这个时期,最好不要看Telephony,不要看绘制相关的(SurfaceFlinger)
有编译环境, 你可以打开源码中的log开关, 甚至添加一些自己的log, 去摸索 (网上binder的资料多得很)
研究源码第四部,就可以看到hardware和driver了
比如binder, 在framework中的c++只是一个薄层和一些简单的逻辑。在hardware,也很薄
这个时候, 你需要clone kernel的代码了
然后看下binder在驱动中是怎么工作的。 粗看就行,既然来知乎问这个,里面的一些很麻烦的点,比如红黑树,了解就行。
这一步走完,你就会发现,很多很厉害的、很精华的东西,都在kernel里面。
前面几步走过之后, 对于源码就会有个明了于心的脉络,后续就可以根据喜好去钻研某一部分。
前面几步,说难,就难,很多时候,你需要去补充知识面,才能继续下去。
前面几步,说简单,就简单,你坚持,肯定能做到
--------------------------------------------------分割线--------------------------------------------------
如果只看Java层的代码,还是很简单的。
如果涉及到各种通讯以及系统调用,就需要熟悉unix编程,以及操作系统基础知识。
再到驱动和boot的过程中就更是os的知识了,和安卓关系其实不大。当然安卓本身也是借鉴了*nix太多东西,如果是系统程序员,学习起来基本不费力气。
如果是纯做应用的开发,不建议太过深入,因为没有基本的系统编程基础,看了也是白搭。
另外安卓源码也要区分着学习,其实也会有很多坑,毕竟源码的开发人员也是参差不齐。
阅读的过程中可以巧记注释:帮助记忆:
关键词注释在后面,就像阅读理解一样,每读一段就写个段落大意,注释不写汉字,只写英文简写,如下图:这个方法里主要就是Character类和String的charAt方法的关系就这么记一下