FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log

流程

我们先修改一个FrameLayout.java文件,确认logcat可以使用,然后再阅读measure的代码,了解大概流程,以及不同类函数之间的调用关系,最后再加入Log代码详细分析measure过程。本篇为确认logcat可用。编辑器为Emacs24。


源码位置

我们要修改的代码位于

frameworks/base/core/java/android/

FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log_第1张图片

这里是安卓框架的源码。具体要修改的文件是截图里android目录下的

widget/FrameLayout.java


修改源码

顶部加入

import android.util.Log;

FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log_第2张图片

加入Log代码

protected void onMeasure(int widthMeasureSepc, int heightMeasureSpec) {
       Log.i("FW", "FrameLayout  enter onMeasure(,)");
       ...
}
FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log_第3张图片


重新编译

退回到根目录,执行

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自动生成的,不要也可以。)

FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log_第4张图片

如果顺利的话你会看到

07-28 04:01:21.099    1170-1170/creation.philip.frameworktest I/FW﹕FrameLayout  enter onMeasure(,)



下篇预告

下一篇我们将会阅读FrameLayout的onMeasure源码,看看onMeasure大致流程是怎样,是不是有点小激动呢。


----------------------------------------------------------------------------

FrameLayout measure过程源码Log全解析系列

你可能感兴趣的:(FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log)