现在的app都开始流行混合开发了,这是一个app开发的新技术,作为android程序猿的我们也应该要了解并且掌握他。那么在使用之前,我们一定要搞清楚,我们的哪些场景使用混合开发好一些呢?这个问题一定要搞清楚,因为现在的混合开发还不成熟,Web页面的渲染效率目前还无法和Native的体验相比,而大家如果只是为了采用新技术就盲目的使用混合开发,最后遇到一些体验问题的话,肯定会得不偿失。
那么什么情况适合Html 5开发呢?像一些活动页面,比如秒杀、团购等适合做Html 5,因为这些页面可能涉及的非常炫而且复杂,Html 5开发或许会简单点,关键是这些页面时效性短,更新更快,因为一个活动说不定就一周时间,下周换活动,如果这样的话,你还做Native是肯定不行的,这些场景就需要使用混合开发了。以下是网上能找到的一些比较好的入门介绍,大家可以学习一下。
混合开发的实质就是在JS和Native之间相互调用,其中的第一篇博客中也提到了,实现混合开发的方式主要的有两种:1、js调用Native中的代码;2、WebView拦截页面跳转。第二种方式因为在Android 4.2(API 17)一下存在高危的漏洞,漏洞的原理就是Android系统通过 WebView.addJavascriptInterface(Object o, String interface) 方法注册可供js调用的Java对象,但是系统并没有对注册的Java对象方法调用做限制。导致攻击者可以利用反射调用未注册的其他任何Java对象,攻击者可以根据客户端的能力做任何事情,如下的文章详细讲解了漏洞产生的根本原因:
上面的博主使用的是别人封装好的一个js框架,git地址如下:
而现在介绍较多的还有Facebook的混合开发框架React Native,大家也可以去看一下:
我们本节要分析的就是safe-java-js-webview-bridge框架了,这里的代码也非常简洁,主界面是WebActivity,看了下我这里的项目源码,有两个WebView类,一个是在frameworks/base/tools/layoutlib/bridge/src/android/webkit路径下的WebView,它是继承MockView的,还有一个是在vendor/letv/webview/base/core/java/android/webkit路径下,开始看到vendor目录,还以为把原生的东西重写的,后来问了下浏览器模块的同事,才知道这不是重写,而是把原生的移动了个目录而已,我们后面的分析也都是在这个包下面的类。
我们从断点可以看到,获取回来的WebSettings的实现类是一个名称为ContentSettingsAdapter的对象,整个源码搜遍,找不到任何相关的东西,看来还是没有源码。这些可能也是谷歌Chrom浏览器的一些核心技术了,如果有哪位精通的,请指点我一下。