【视频教程】老罗分享Android源代码下载和编译及如何分析源代码
小编语:老罗(罗升阳)的Android之旅,在国内是让不少人收益,也给了我非常大的启示,老罗最近自己折腾了一个网站叫《进击的程序员》,域名:http://0xcc0xcd.com/,继续他的分享之路。他最近录制了两个视频,放在他的网站,是免费的,由于他传的是优酷视频,可能要看一会广告。下面是一些视频的大纲,老罗的写出那本厚书,就是在他的Ubuntu下完成他的源代码分析。我没看视频时,是很难想象我们平时熟悉的linux命令,还可以这么玩。我以前是用学校机房服务器,编译了源码,耗时很长且慢,后来觉得,源码阅读及分析才是关键,我少有真正从骨子里佩服的人。老罗是其中一个,当然,我也是老罗的铁粉,一如既往支持老罗,向老罗学习。点击【阅读原文】,可直接看视频,感兴趣的记得关注老罗的网站《进击的程序员》http://0xcc0xcd.com/,两个视频就在他的页面上。下面简介下视频大纲。
《Android源代码下载和编译》视频大纲
视频大纲
一. 源码下载
1.1 开发机
Linux(Ubuntu)
Mac
1.2 翻墙
1.2 初始化环境
http://source.android.com/source/initializing.html
1.3 下载源码
http://source.android.com/source/downloading.html
自动下载脚本
for (( ; ; ))
do
repo sync -j16
if [ $? == 0 ]; then
break;
fi
done
错误处理示例:
1. stderr: fatal: remote error: Daily ls-remote rate limit exceeded for IP 188.165.175.132.
http://source.android.com/source/downloading.html#using-authentication
2. Fetching projects: 99% (478/482) Fetching project platform/external/sqlite
error: Cannot fetch platform/packages/apps/OMA-DM
搜索错误提示:Cannot fetch platform/packages/apps/OMA-DM
二. 源码编译
http://source.android.com/source/building.html
错误处理示例:
1. unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
搜索错误提示:unsupported reloc 43
2. make update-api
see build/core/apicheck_msg_current.txt
******************************
You have tried to change the API from what has been previously approved.
To make these errors go away, you have two choices:
1) You can add "@hide" javadoc comments to the methods, etc. listed in the errors above.
2) You can update current.txt by executing the following command:
make update-api
To submit the revised current.txt to the main Android repository,
you will need approval.
******************************
《Android源代码情景分析法》视频大纲
一. 工具
1.1 vim
模式切换 -- i、esc
搜索 -- /<关键字>
跳转到指定行 -- :<行号>
剪切、复制、和粘贴指定行 -- dd、yy、p
剪切、复制、和粘贴指定内容块 -- v、d、y、p
创建新行并进入编辑模式 -- o
Undo、Redo -- u、ctrl + r
保存、退出 -- w、wq、q!
1.2 find + xargs + grep
查找ActivityManagerNative类的子类:
?
find -name '*.java' | xargs grep 'extends[ nt]+ActivityManagerNative'
二、情景分析
一个工程会由很多个模块组成,每一个模块向外提供若干个调用接口。这些调用接口就是我们分析源码的切入点。从这些切入点出发,一步一步地跟踪每一个函数调用,直至终点。这个分析过程就是情景分析。情景分析实际上是把源码划分成一条又一条的线,每一条线都会把相关的功能点串在一起,形成一个上下文。因此,当我们选定了一条线进行分析的时候,就可以把无关的模块晾在一边,最大程度地减少干扰。
在做情景分析的时候,我们要适当地做笔记,主要记录函数的调用过程以及函数的位置。这样不仅能提高分析源码的效率,也方便日后反复查阅。
示例,Activity启动过程分析(基于5.0.0_r1版本源码):
?
1-->
Activity.startActivity
frameworks/base/core/java/android/app/Activity.java
2-->
Activity.startActivityForResult
frameworks/base/core/java/android/app/Activity.java
3-->
Instrumentation.execStartActivity
frameworks/base/core/java/android/app/Instrumentation.java
4-->
ActivityManagerProxy.startActivity
frameworks/base/core/java/android/app/ActivityManagerNative.java
5-->
ActivityManagerNative.onTransact
frameworks/base/core/java/android/app/ActivityManagerNative.java
6-->
ActivityManagerService.startActivity
frameworks/base/services/core/java/com/android/
server/am/ActivityManagerService.java
......
详细过程,参考:Android应用程序启动过程源代码分析
Office Word: 流程图、架构图和示意图
MagicDraw UML: 类图、序列图
第一时间获得博客更新提醒,以及更多android,源码分析,最新开源项目推荐,更多有价值的思考,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码
查看评论 回复