Debugging of Chrome Android WebView

Debugging of Chrome Android WebView

Chrome Android WebView Debugging

作者: 易旭昕 (@roger2yi)



本文主要描述如何将 Chrome 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

  • 修改 /frameworks/webview/chromium 目录下的 Android.mk 文件里面库的名字:
  1. LOCAL_MODULE:= libwebviewuc_plat_support
  • 修改 /frameworks/webview/chromium/plat_support 目录下代码里面 JNI 调用涉及的 Java 类路径,已经修改好的代码位于 CAW Shell 的 /aosp/plat_support 目录下,直接覆盖同名文件即可。
  • 在 /frameworks/webview/chromium 目录下运行:
  1. mm -j8

编译出新的 libwebviewuc_plat_support.so 库。

3. 重新编译出 libwebviewuc.so

  • 修改 /external/chromium_org/android_webview 目录下的 libwebviewchromium.target.linux-arm.mk 文件里面库的名字:
  1. 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 目录下运行:
  1. mm -j8

编译出新的 libwebviewuc.so 库。

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

  • 将不带符号的库拷贝到自己工程的 libs/armeabi 目录下;
  • 将带符号的库拷贝到自己工程的 obj/local/armeabi 目录下;
  • 为 Android Projct 增加 Native 支持,并在 Builder 属性页面里面取消掉 CDT Builder 选项,避免 Eclipse 去调用 ndk-build 编译,因为我们是使用事先编译好的 .so 库。
  • 在 Eclipse 里面创建一个 C++ Project,导入 CAW 的 C++ 代码,根据自己的需要打断点;
  • 使用 Debug As > Android Native Application 进行 C++ 代码调试;

Debugging of Chrome Android WebView

时间: 2024-08-25 15:04:35

Debugging of Chrome Android WebView的相关文章

强制开启android webview debug模式使用Chrome inspect

一.普通h5页面手机端调试 此种方式最简单,在安卓手机中安装安卓版 chrome,USB 连接 PC,然后在 PC 的 chrome 浏览器中打开 chrome://inspect 即可. 三.基于webkit核心的webview端调试 从 Android 4.4 开始,webkit是支持远程调试的,不过需要将app的debug模式打开,可以使用如下代码:WebView.setWebContentsDebuggingEnabled(true); 由于大部分 App 的 debug 模式是关闭的,

Android WebView 开发详解(一)

转载请注明出处  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android WebView在Android平台上是一个特殊的View, 他能用来显示网页,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器.WebView内部实现是采用渲染引擎来展示view的内容,提供网页前进后退,网页放大,缩小,搜索,前端开发者可以使用web inspector(A

android webview远程调试

H5的调试的方式一般用chrome的emulator就好,可是遇到APP就拙计了.这时候还得用远程调试,远程调试很给力,不过目前网上还没有好的文章讲解,要好好的把其配置下来还是非常有难度的,今天折腾了半天,终于弄好,分享一下 配置需求 话说其配置也是非常有考究的,和ios开发一样,都是有门槛的货,告诉大家屌丝误入,不过这个条件作为屌丝的我也算是打了擦边球,唯一要求就是android系统要4.0以上才支持 app代码 如果需要调试那么,代码中一定要先在,apk生成前的开发包中的manifest.x

你不知道的 Android WebView 使用漏洞

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由 Android的WebView 实现的,但是 WebView 使用过程中存在许多漏洞,容易造成用户数据泄露等等危险,而很多人往往会忽视这个问题 今天我将全面介绍 Android WebView的使用漏洞 及其修复方式 阅读本文前请先阅读: Android开发:最全面.最易懂的Webview详解 最全面 & 最详细的 Android WebView与JS的交互方式 汇

android WebView详解,常见漏洞详解和安全源码(下)

上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http://blog.csdn.net/self_study/article/details/55046348 对技术感兴趣的同鞋加群 544645972 一起交流. WebView 常见漏洞 WebView 的漏洞也是不少,列举一些常见的漏洞,实时更新,如果有其他的常见漏洞,知会一下我-- WebView

手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.

Android WebView启动Chromium渲染引擎的过程分析

Android WebView加载了Chromium动态库之后,就可以启动Chromium渲染引擎了.Chromium渲染引擎由Browser.Render和GPU三端组成.其中,Browser端负责将网页UI合成在屏幕上,Render端负责加载网页的URL和渲染网页的UI,GPU端负责执行Browser端和Render端请求的GPU命令.本文接下来详细分析Chromium渲染引擎三端的启动过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Andro

Android WebView 详解

相关API 相关类介绍 WebResourceRequest 添加于API21,封装了一个Web资源的请求信息,包含:请求地址,请求方法,请求头,是否主框架,是否用户点击,是否重定向 WebResourceResponse 封装了一个Web资源的响应信息,包含:响应数据流,编码,MIME类型,API21后添加了响应头,状态码与状态描述 WebResourceError 添加于API23,封装了一个Web资源的错误信息,包含错误码和描述 CookieManager 管理用于WebView的cook

Android WebView 调试方法

调试Android WebView中的h5页面,通常就是通过alert和抓包工具来定位问题,效率低且无法直接调试样式或打断点,可谓是事倍功半.本文介绍一下我在项目中使用的新方法,能够通过chrome的开发工具在原生 Android 应用中调试 WebView. 前提条件: Android4.4+ 基本原理: 1.在APP中启用 WebView 调试,开启调试后,Chrome DevTools才能对WebView进行远程调试: WebView.setWebContentsDebuggingEnab