xml地图|网站地图|网站标签 [设为首页] [加入收藏]

智能家电

当前位置:美高梅游戏网站 > 智能家电 > 搭建 Android 混编框架(1)

搭建 Android 混编框架(1)

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-10-03 12:39

这里我对 WebViewClient 进行了封装,目的在于重写 shouldOverrideUrlLoading 方法,对web端发起请求按 schema 进行区分,区分为 http 请求和我们对原生方法的请求,

混合 Android 框架流行一时,个人也用过像 hbuilder 或 cordova 这样框架开发过一两个应用,只是停留在用的层面上,直到前一段时间才研究了一下其内部的机制,自己通过学习别人的思想而受启发自己研究了一套解决方案。

public class SpWebViewClient extends WebViewClient

在 Android 混合开发的框架中,有以下几个技术难点是我们需要克服的。

我们创建一个 SpWebViewClient 来继承 WebViewClient,也就是 WebViewClient 进行封装。

  • javascript 和原生 java 互调首先我们来看框架中,是如何实现 javascript 和 java 的互调,也就是两种语言间的通讯。传统方式是通过暴露全局对象来实现 javascript 和 java 进行互调方法,这样做耦合度高,不安全,而且不可控。
@Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { Uri parse = Uri.parse;//解析请求的 url String scheme = parse.getScheme();//获取 url 的sheme // if(SpConfig.SCHEME.equals{//判断 scheme 是否为 zidea,如果为 zidea 则进行对原生方法请求 String host = parse.getHost();// 获取 host 也就是原生的方法名 String param = parse.getQueryParameter(SpConstant.GET_PARAM);//获取参数 String callback = parse.getQueryParameter(SpConstant.GET_CALLBACK);//获取参数 try { //这是一个分发方法,根据 host(方法名称、参数、回到)调用进行分发 spDispatcher(host,param,callback); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } //这里需要控制,只有注册方法才能被调用,没有注册方法不会被调用 return false; }

思路是 javascript 端向 dom 添加一个 iframe,然后通过 iframe 发起请求来调用原生的方法,传递函数,这样达到解耦的目的,自然也提高了应用的安全性。我们需要定义 url 的特定 schema 来区分普通 url 请求和调用原生方法的请求。

这个分发类 spDispatcher 负责根据方法名称、参数和回调将这些参数分发给对应处理的原生方法,这里所有原生方法都是 Action。

<iframe srt="zidea://<原生方法名>?param=<参数对象>&callback=<回调>" style="display:none;">zidea://<原生方法名>?param=<参数对象>&callback=<回调>
private void spDispatcher(String method, String params,String jsmethod) throws IllegalAccessException, InstantiationException{ //方法名称获取到获取对应的类,参见下图 Class type = SpConfig.ActionMapping.mapping; //我们实例化一个对应的 Action SpAction action =  type.newInstance(); //因为所有 Action 都实现 onAction 这也就是我们调用的具体原生方法,这部分内容稍后解释,大家只需要有一个印象 action.onAction(mWebView,params,jsmethod); }

这里我们解释一下

本文由美高梅游戏网站发布于智能家电,转载请注明出处:搭建 Android 混编框架(1)

关键词: