前面的话
view的加载分为measure, layout, draw三个步骤。其中view的measure过程相对比较复杂,为了更好地写自定义view widget,有必要搞清楚measure的具体执行方法。本系列将会从android framework的源码角度,一步一步分析FrameLayout的measure过程。
相比LinearLayout和RelativeLayout,FrameLayout的measure过程比较简单,因此我们从FrameLayout开始。我们将会修改android framework源码,添加Log代码,不仅分析源码,也通过Log消息证实/伪我们的分析。
下载源码
1. 常规的源码下载方法
通过repo下载。repo是git的wrapper。这应该是最方便的下载方法了,不过最近服务器总连不上。浪费了我n多时间和睡眠最后还是放弃了。
参考:http://source.android.com/source/downloading.html
2. 网盘打包下载
这个博客有4.4代码打包下载,非常不错哦。博主真是好人。亲测可用。
http://blog.csdn.net/Innost/article/details/14002899
build环境
我用的是OSX 10.9.3,unix系列的都可以。windows没有试过。
注意OSX文件系统默认是大小写不敏感的。需要建立sparse image。我直接分了一个区,分区的时候选择case-sensitive mac日志格式也可以。
编辑环境我使用Android Studio(以下AS)和Emacs。
make及错误解决
在源码根目录输入以下命令
建立环境
source build/envsetup.sh
选择镜像版本
lunch
我选择的是 asop-arm-eng
然后环境就建立好了
接着开始编译项目
make -j4
-j4 是4线程的意思,自行调整。首次编译需要很长时间,我的笔记本用了大概3小时左右。台机大概20分钟左右。
如果出现,chromium_org中出现JNI神马错误的。是因为代码本身对OSX识别有问题。可以参考github上这个方法修改源码。
源码定位
make完了之后会显示:
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392
整个编译后安卓文件夹截图如下:
设置模拟器
编译好的source里面带有一个模拟器,因为我比较懒,不想敲太多命令,就直接用了AS里面的AVD manager建立了名为MyPhone的模拟器。截图如下。
可以看到out/target/product/generic下面有几个img
现在将刚才编译好的镜像刷入这个模拟器,在generic目录下输入:
/Applications/Android\ Studio.app/sdk/tools/emulator @MyPhone -system system.img -ramdisk ramdisk.img
注意我用的是SDK中的模拟器,用源码中的也可以。这时候模拟器就会启动了。