[关闭]
@rogeryi 2015-01-05T10:35:53.000000Z 字数 2198 阅读 5214

Debugging of Chromium Android WebView

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 的代码,所以一些具体的做法并不一样:

  1. 首先 CAW Shell 代码的来源是 AOSP Android Source 而不是 Chromium Source;
  2. 编译 .so 库是在 ROM 编译环境下进行,所以在 C++ 部分会使用非公开的 Native API;

所以,CAW Shell 理论上只能在 Android 4.4.3/4.4.4 上运行。

总的说来,CAW Shell 所需的操作步骤包括:

  1. 从 AOSP 下载 Android 4.4.3/4.4.4 源码,并先编译出 ROM;
  2. 将所有 Java 代码从 AOSP 里面拷贝到自己的工程,包括属于 Android Source 和属于 Chromium Source 的部分,还包括一些预编译过程自动生成的 Java 代码;
  3. 修改 Java 代码,主要修改包名避免跟 SDK 冲突和解决 Hidden API 调用的问题,解决的方法包括:
    1. 拷贝使用到的内部类到自己的工程;
    2. 使用反射调用隐藏 API;
    3. 一些涉及内部资源使用的代码,大部分都直接注释掉;
  4. 修改相关 .mk 工程文件里面库的名字,修改 JNI 调用相关文件里面的 Java 类路径,重新编译得到新的 .so 库,避免跟系统库冲突;
  5. 将新的 .so 库拷贝到自己的工程,修改 Java 代码加载新的 .so 库,加上一个简单的 TestShell 代码,然后打包生成独立应用 APK;

调试代码

调试 Java 代码比较简单,使用 CAW Shell 的代码在 Eclipse 里面创建一个 Android Project 即可,如果要调试 C++ 的代码,则需要读者自行编译出 .so 库。

CAW Native Debugging

1. 下载 AOSP Android 4.4.3 的代码,并按照官方文档先编译出 ROM 镜像

2. 重新编译出 libwebviewuc_plat_support.so

  1. LOCAL_MODULE:= libwebviewuc_plat_support
  1. mm -j8

编译出新的 libwebviewuc_plat_support.so 库。

3. 重新编译出 libwebviewuc.so

  1. LOCAL_MODULE:= libwebviewuc
  1. mm -j8

编译出新的 libwebviewuc.so 库。

4. 将 libwebviewuc_plat_support.so 和 libwebviewuc.so 导入自己的 Android Project

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注