版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自http://javaexception.com/archives/78

背景:

突然想写一篇关于Android WebView与H5联调技巧的文章,在这块内容也算是小有心得。平时在工作中,发现不少同事,对这块很迷糊,在联调过程中出现了问题,不知道究竟是哪一端的问题,究竟是h5造成的,还是Android造成的,分析不出原因,真是不好说啥,本着对自我有着较高的要求,那么就Android,H5一起搞定吧。

在此之前可以看一篇文章,配置好调试所需要的基础环境。这篇文章写的不错,可以参考 利用 Chrome 开发者工具远程调试 Android 中的原生 WebView

心得技巧:

开启WebView的debug模式后,Android设备连接USB,打开chrome浏览器,输入chrome:inspect,然后手机App打开对应的h5页面,在Chrome里面就能看到这个网页了,下面就是调试的步骤。

在Chrome:inspect页面,点击打开手机h5对应的url,会看到Chrome里面开始加载相关资源,比如css文件,js文件等等。当然了我们可以点击Chrome上的刷新按钮,这样会重新加载一次当前的h5页面。这个时候可以清晰的看到加载资源的过程。相关的css,js,html的页面都可以在Chrome浏览器上看到,这些页面的源代码也能看到。这才是我们该关注的。

从这一步开始,我们可以从程序执行的先后顺序调试,一开始加载h5页面肯定是在Android这边的代码,断点可以打在Android里面相关调用的地方,比如webView.loadUrl()这块代码附近,还有注入js的逻辑等等,Android跟h5交互都是有桥接的,这款也可以加上断点,这个需要结合自己使用的是哪种jsbridge或者说是Interface这样的方式等等。

常见出现问题的是注入js有问题,相关的js方法并没有注入成功。这一步可以在断点打在h5页面上查看,这里需要仔细梳理下h5的初始化逻辑,看看h5是如何对这些原生方法进行包装的,初始化的判断逻辑是啥,有时候真的需要仔细,header,userAgent等等都可能导致问题,还有就是查看类似window.jsbridge对象的内部方法声明,有时候方法不生效,可能是参数不对,这都有可能。

通常我们看到某个js文件某行代码报红,就意味着这行出现问题,问题可能就在这,产生的原因,需要看上面相关的代码。出现js错误后,下面的js代码就不会在执行了。当然了我们也可以手动修改js文件的代码,这是可以的,扯远一点,这种就可以做最简单的作弊,黑产等等。

碰到这种联调问题,需要仔细分析上下文条件,从程序执行顺序的第一步开始打断点,分析,同时观察对应变量的值,有时候需要h5断点,Android代码都打开着,会来回切换,总之顺着程序执行顺序流的角度来分析,最终肯定可以定位出问题所在。实力打脸甩锅的同事。。

当然了有时候也需要h5同事的配合,比如有js代码压缩,用的是vue.js之类的,可以让对应的同事配合下,关掉代码压缩,方便联调。

参考资料:

http://yifeng.studio/2017/04/29/debug-android-webview-with-chrome-dev-tools/

Android WebView与H5联调技巧的更多相关文章

  1. android webview处理h5打开本地文件浏览器的功能

    这周遇到一个比较棘手的问题,需要在android上边集成h5页面,并且在h5页面上,需要用户能够上传android本地的照片,一开始我以为webview会自动处理掉的,因此没太留意,当真正集成时,才发 ...

  2. Android WebView 支持H5的定位Js

    //启用数据库 webSettings.setDatabaseEnabled(true); String dir = this.getApplicationContext().getDir(" ...

  3. android:如何通过chrome远程调试APP中的webView的h5代码

    今天出现一个问题,在老板的Mate9 Pro上,我们APP的所有H5页面都是一片空白,但是在其他手机上都是好的,那么我们就怀疑是h5报错了,但是到底是什么错,无法得知,所以就想要可以像在pc的chro ...

  4. Android WebView 超大字号适配问题

    目前在使用 Android WebView 展示H5页面的时候,存在当系统字号设置超大的时候,出现页面内容展示不全的问题. 此问题是因为Android WebView 默认使用系统字号进行展示. 解决 ...

  5. Android WebView 不支持 H5 input type="file" 解决方法

    最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中.发现点击H5中 标签 不能打开android资源管理器. 通过网络搜索发现是因为 android webvie ...

  6. Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。

    当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID:  大概就是点击H5界面跳转到Androi ...

  7. Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  8. Atitit.android webview h5运行环境总结

    Atitit.android webview h5运行环境总结 1. WebView 的使用1 2. Js调用java1 3. Js调用java 跟个swt的比较2 3.1. Swt是BrowserF ...

  9. Android WebView 基本设置与H5 交互

    mWebView.setDrawingCacheEnabled(true); WebChromeClient webChromeClient = new WebChromeClient(); mWeb ...

随机推荐

  1. 17-Python执行JS代码--PyExecJS、PyV8、Js2Py

    一.Python执行JS代码--PyExecJS.PyV8.Js2Py 1.1.PyExecJS PyExecJS的优点是您不需要照顾JavaScript环境.特别是,它可以在Windows环境中运行 ...

  2. Unity3D for iOS初级教程:Part 3/3(下)

    转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111739.html 消息不会自动消除 你基本的游戏功能已经完成了,但是显示一些关于游戏 ...

  3. 放大镜效果 --- enlarge.js

    html页面: 注释:遮罩层的大小取决于   ===>layerwidth/layerheight = largewidth/largeheight  enlarge.js页面 /*   jqu ...

  4. [TimLinux] MySQL 入门指导

    1. 说明 本部分内容参考MySQL参考手册第三章:Chapter 3 Tutorial. 2. 版本 下载安装:https://dev.mysql.com/get/Downloads/MySQL-5 ...

  5. CoderForces-913-C

    A New Year party is not a New Year party without lemonade! As usual, you are expecting a lot of gues ...

  6. 可扩展的Java线程池执行器

    分享一下最近优锐课学习笔记. Java线程池执行程序偏向于排队而不是产生新线程.从好的方面来说,我们有两种解决方法. 理想情况下,对任何线程池执行程序而言,期望如下: 预先创建了一组初始线程(核心线程 ...

  7. css分类和选择器

    css的分类:内联,内嵌,外部 内联:写在标签里,style=样式,控制精准代码实用性差. 内嵌:嵌在<head></head>里 <style type="t ...

  8. Java_用*输出等腰三角形

    // 代码............................................................... import java.util.Scanner;public ...

  9. win10 修改用户目录为英文

    win10家庭版怎样进入 administratornet user administrator /active:yes net user administrator /active:no

  10. C语言每日一练——第5题

    一.题目要求 选出大于100小于1000的所有个位数与十位数字之和被10除所得余数恰好是百位数字的所有数字(如293).计算并输出上述这些素数的个数cnt以及这些素数值得sum,最后把结果cnt和su ...