作者:墨小西
链接:https://www.zhihu.com/question/19759722/answer/17019083
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.宏观上看,Android源码分为功能实现上的纵向,和功能拓展上的横向。在阅读源码时需要把握好着两个思路。
譬如你需要研究音频系统的实现原理,纵向:你需要从一个音乐的开始播放追踪,一路下来,你发现解码库的调用,共享内存的创建和使用,路由的切换,音频输入设备的开启,音频流的开始。
譬如你要看音频系统包括哪些内容,横向:通过Framework的接口,你会发现,音频系统主要包括:放音,录音,路由切换,音效处理等。
2.Android的功能模块绝大部分是C/S架构
你心里一定需要有这个层级关系,你需要思路清晰地找到Server的位置,它才是你需要攻破的城,上面的libraries是不是很亲切的样子?看完它长成啥样后,然后你才能发现HAL和Kernel一层层地剥离。
很多研究源码的同学兜兜转转,始终在JAVA层上,这是不科学的,要知道libraries才是它的精髓啊。
3.Android的底层是Linux Kernel。
在理解1,2后,还是需要对Kernel部分有个简单的理解,起码你要熟悉kernel的基础协议吧!你要能看懂电路图吧!你要熟悉设备的开启和关闭吧!你要熟悉调寄存器了吧!这方面的书太多了,我建议根据实例去阅读,它并不复杂,不需要一本本厚书来铺垫。
在libraries和kernel间,可能还会有个HAL的东东,其实它是对kernel层的封装,方便各个硬件的接口统一。这样,如果我换个硬件,不用跑了长得很复杂的libraries里面改了,kernel调试好了后,改改HAL就好了。
环境的搭建
AOSP 镜像使用帮助 — USTC Mirror Help 文档
Android 开发者 Codelab | Android 开源项目 | Android Open Source Project (google.cn)
1.repo安装及配置
apt install repo
2. 换源ustc,repo源
vim /usr/bin/repo
REPO_UR 的值替换为 https://gerrit-googlesource.proxy.ustclug.org/git-repoL
3. 链接python
sudo ln -s /usr/bin/python3 /usr/bin/pytho
4. git消息
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
5.yes
6.repo sync -c -j8
repo sync -c -j8