流程
我们先修改一个FrameLayout.java文件,确认logcat可以使用,然后再阅读measure的代码,了解大概流程,以及不同类函数之间的调用关系,最后再加入Log代码详细分析measure过程。本篇为确认logcat可用。编辑器为Emacs24。
源码位置
我们要修改的代码位于
frameworks/base/core/java/android/
这里是安卓框架的源码。具体要修改的文件是截图里android目录下的
widget/FrameLayout.java
修改源码
顶部加入
import android.util.Log;
加入Log代码
protected void onMeasure(int widthMeasureSepc, int heightMeasureSpec) {
Log.i("FW", "FrameLayout enter onMeasure(,)");
...
}
重新编译
退回到根目录,执行
make -j4
这次编译内容较少,时间比较短,在我的笔记本上大概用了15-20分钟。第一次编译用了好几个小时,汗。
启动模拟器
注意事项参看第一篇启动模拟器部分。
/Applications/Android\ Studio.app/sdk/tools/emulator @MyPhone -system system.img -ramdisk ramdisk.img
如果模拟器不能启动,比如卡在Logo,应该是修改代码的时候出现了什么问题,因为系统也用到了FrameLayout。这时候新开一个命令行窗口,输入:
adb logcat
就可以看到加载的过程,看看有没有什么错误出现。比如我就曾经有个null pointer exception,浪费了好久时间。
如果顺利的话,应该会看到:
测试Log代码
写一个简单的app, 在activity的xml中把最外面的layout改为FrameLayout,然后run,选择刚才用命令行启动的模拟器。
(下图padding什么的是AS自动生成的,不要也可以。)
如果顺利的话你会看到
07-28 04:01:21.099 1170-1170/creation.philip.frameworktest I/FW﹕FrameLayout enter onMeasure(,)
下篇预告
下一篇我们将会阅读FrameLayout的onMeasure源码,看看onMeasure大致流程是怎样,是不是有点小激动呢。
FrameLayout measure过程源码Log全解析系列