@rogeryi
2015-01-05T10:35:53.000000Z
字数 2198
阅读 5214
Android
WebView
Debugging
作者: 易旭昕 (@roger2yi)
本文主要描述如何将 Chromium Android WebView (下文简称CAW)的代码从 AOSP 中抽离出来,编译成独立的应用,方便对 CAW 的 Java/C++ 代码进行跟踪调试。
相关的代码位于 GitHub Chrome Android WebView TestShell (下文简称 CAW Shell) 项目上,读者可以下载代码,只要在 Eclipse 工程里面创建一个 Android Project,就可以对 Java 部分的代码进行调试,并且仓库里面也包含了一个编译好的 APK 安装包,可以直接安装试用。如果要调试 C++ 代码,读者还需要下载 AOSP Android 4.4.3 的代码,在 ROM 编译环境下编译出所需的 .so 库。
为了容易理解本文的内容,建议读者阅读官方文档 Organization of code for Android WebView 先对 CAW 的代码结构有一个大致的了解。
将 CAW 代码抽离出来编译成独立应用的做法,参考了放飞梦想的 ChromeView 项目,不过因为两者的目的不一样,CAW Shell 项目的目的只是为了方便调试 CAW 的代码,所以一些具体的做法并不一样:
所以,CAW Shell 理论上只能在 Android 4.4.3/4.4.4 上运行。
总的说来,CAW Shell 所需的操作步骤包括:
调试 Java 代码比较简单,使用 CAW Shell 的代码在 Eclipse 里面创建一个 Android Project 即可,如果要调试 C++ 的代码,则需要读者自行编译出 .so 库。
CAW Native Debugging
1. 下载 AOSP Android 4.4.3 的代码,并按照官方文档先编译出 ROM 镜像
2. 重新编译出 libwebviewuc_plat_support.so
LOCAL_MODULE:= libwebviewuc_plat_support
修改 /frameworks/webview/chromium/plat_support 目录下代码里面 JNI 调用涉及的 Java 类路径,已经修改好的代码位于 CAW Shell 的 /aosp/plat_support 目录下,直接覆盖同名文件即可。
在 /frameworks/webview/chromium 目录下运行:
mm -j8
编译出新的 libwebviewuc_plat_support.so 库。
3. 重新编译出 libwebviewuc.so
LOCAL_MODULE:= libwebviewuc
修改 /out/target/product/mako/obj/GYP/shared_intermediates 目录下 XXX_JNI.h 代码里面 JNI 调用涉及的 Java 类路径,已经修改好的代码位于 CAW Shell 的 /aosp/jni 目录下,直接覆盖同名文件即可。其中 mako 子目录会根据读者编译 ROM 的目标设备不同而不同。
在 /external/chromium_org 目录下运行:
mm -j8
编译出新的 libwebviewuc.so 库。
4. 将 libwebviewuc_plat_support.so 和 libwebviewuc.so 导入自己的 Android Project