Android4.4之后Google利用Chromium内核代替了WebKit内核,因此可以利用chromium的一些机制进行分析调试,这里通过chromium的trace机制跟踪调试webview内核。
这里以Android5.0代码为例,在ContentViewCore里面添加少量代码,从而对webview应用都能进行trace(4.4上类似,貌似是IntentFilterHandler类)。
导入文件名:import org.chromium.content.browser.TracingControllerAndroid;
在ContentViewCore类中添加如下变量定义:
TracingControllerAndroid mTracingController = null;
在ContentViewCore构造函数中添加如下代码:
mTracingController = new mTracingController(mContext);
mTracingController.registerReceiver(mContext);
将编译生成的webview.apk代替系统的webview.apk,打开webview应用后即可利用如下命令开启和结束采样:
开启:adb shell am broadcast -a XXX.GPU_PROFILER_START -e YYY
停止:adb shell am broadcast -a XXX.GPU_PROFILER_STOP
其中XXX代表对应的webview应用包名(如浏览器为com.android.browser),YYY代表需要保存的采样数据的文件名(如/sdcard/Download/trace.txt)。
将采样后的数据文件pull到本地,再在PC版chrome浏览器中利用chrome://tracing导入数据文件即可进行分析(a/x/d/f按键分别代表左移、缩小、放大、右移视图)。
trace详细信息参见http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/trace-event-reading。