AppInterface,一套Android与H5的混合开发框架
AppInterface
最近的工作主要是围绕APP与内嵌H5开发而展开的,所以写了个小框架,以期能提升客户端童鞋与前端童鞋的开发效率。具有Android与H5两部分内容,互相搭配使用,接口简洁,执行效率高,使用简便,能极大的提升开发效率。
下方是github地址:
https://github.com/yanglang1987500/AppInterface
简介
基于安卓实现的一个通过拦截请求与JSBridge的小框架,纯REST风格,基于注解与反射实现,类似于SpringMVC的Controller风格
使用指南
通过使用:
AppInterface.getInstance().init(this,"com.webview.sniyve.webview.controllers");
进行初始化工作。
第一个参数代表安卓Context
对象,第二个参数是控制器所处包路径,框架会自动扫描此包路径下所有实现了Controller
注解的类,并为其建立REST索引与反射并缓存。
提供两种交互方式
- 使用URL拦截形式,此方式需要在
WebViewClient
实现类的shouldOverrideUrlLoading
方法中进行拦截处理,直接调用
AppInterface.getInstance().handle(view,url);
即可,此方法会返回布尔值,为真代表匹配到了处理器,为假代表未匹配到处理器,理应进行放行。
* 使用JSBridge形式,此方式可以在webView实例化时直接调用
AppInterface.getInstance().initJsBridge(webView);
即可,框架会提供一个名为ApplicationInterface
的js对象以供调用,js调用方法为
ApplicationInterface.call(url)。
这两种方式可以并存,怎么调都行,拦截器都会拦截并通知相应的Controller进行处理,并统一进行回调处理。
控制器写法
控制器需要继承自BaseController
,并在类上加@Controller("host")
注解,并且需要在相应方法上加@RequestMapping("/path")
注解。
待映射的协议方法需要实现两个入参Map<String,Object> params
与AppInterfaceCallback callback
,前一个是参数包,后一个是回调接口。Controller
可以通过调用父类的getContext()
方法获取Android上下文对象。
使用示例如下:
@Controller("common")
public class CommonController extends BaseController{@RequestMapping("/toast")public void toast(Map<String,Object> params,AppInterfaceCallback callback){String message = (String)params.get("msg");Toast.makeText(this.getContext(), message, Toast.LENGTH_SHORT).show();callback.call(null);}
}
如此便实现了一个简单的common/toast
协议,所有参数都在params对象中,callback用于执行回调。
此框架建议与AppInterface.js进行搭配使用。
新增了一套框架的广播订阅机制
test包中已经给出了使用示例
具体使用方法如下:
订阅:
AppInterface.getInstance().subscribe("onClick", new Callback() {@Overridepublic void call(Map<String, Object> params) {TextView textView = (TextView) MainActivity.this.findViewById(R.id.textView);textView.setText((String) params.get("value"));}});
发布:
@RequestMapping("/order_manage")
public void orderManage(Map<String,Object> params, final AppInterfaceCallback callback){Map<String,Object> pms = new HashMap<String,Object>();pms.put("value", params.get("shopId"));AppInterface.getInstance().notify("onClick",pms);}
}
此模式可以解决不同类或不同Activity中互通事件的问题。
关于性能
实测,Nexus4手机,框架初始化12个Controller,35个协议约35ms-70ms时间,拦截请求耗时(已缓存反射的情况下)为1ms,非常快!
如此便实现了效率高,全自动的目的。
关于AppInterface.js
AppInterface.js是一个通过js调用APP的工具包,内置了一套广播订阅机制与相关接口。但是调用APP不用关心广播,只需要使用
AppInterface.call('/common/login',{user:'test',password:'test'
},function(data){console.log(data.message);
});
即可与APP进行交互,两端都是走的协议形式,不论是通过拦截请求还是JsBridge方式,最终都会解析此协议,并通知相应的Controller进行处理。AppInterface.call()
内部会优先使用JsBridge形式,如果APP环境未提供此功能,则使用发送请求的形式,最终达到的效果是一致的,AppInterface.js所提供的call功能不论是对于安卓还是对于iOS都是兼容的。
最终的目标就是js端只需要按照约定的协议调用call方法,App端只需要实现相应协议的Controller类与协议方法即可。
AppInterface,一套Android与H5的混合开发框架相关推荐
- android studio运行手机时出错怎么解决_小程序 android ios h5解决方案
你现在开发android,ios,小程序用什么工具,怎么开发的?还在单个端的开发吗?今天我们主要讨论的是一次开发多端使用的技术,也是这两年比较流行的开发方向.现在的终端太多了,app两个端androi ...
- WebView详解与简单实现Android与H5互调
为什么要学习Android与H5互调? 微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器 ...
- Android 系统(229)---Android与h5交互专题
[Android开发进阶系列]Android与h5交互专题 1 交互原理 1.1 webview如何加载H5页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件 ...
- 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...
- Android 与 H5 数据的传递
最近项目开发使用了 Android 原生和 H5 的混合开发,以前也没怎么接触过.所以这次和 H5 联调对接还是踩了很多坑,这里也做个总结希望可以帮助到大家... 首先 Android 和 H5 主要 ...
- Android+webview+h5 拍照闪退问题
Android在某些机型中拍照闪退 最近一个Android的项目,使用webview+H5的混合开发模式.这样的模式主要是开发周期端,而且避免了机型兼容的问题.在实际使用中却发现了另外一些问题. 问题 ...
- Android与H5交互探索之旅
周一清早,某技术(对接我司业务SDK的技术)在有我司boss的微信群火急火燎地艾特我说为什么H5的回调 SDK 这边收不到?看到消息的我内心瞬间那是焦虑的一P,飞奔公司打开电脑双击IDE,心想别人用的 ...
- Android Webview H5 秒开方案实现
本文首发于微信公众号「玉刚说」 原文链接:Android Webview H5 秒开方案实现 前言 现在许多app都嵌入了H5页面, 然而WebView加载速度慢这个问题却一直影响着用户的体验, 所以 ...
- android 和h5交互,Android中与H5的交互
Android日常开发中,常常会遇到加载H5页面的情况,于是少不了与H5页面的交互问题.具体表现在Android调用H5代码及H5中调用Android代码两种情况. 测试页面 test.png 这里我 ...
最新文章
- 计算机教师资格证报考科目,还在纠结报考教师资格证该选哪个科目呢?看完这篇,你不再迷茫...
- hdu1914 稳定婚姻问题
- 用 W32DASM看IF高级语法
- 01-二维数组中的查找
- libevent的两个服务端、客户端示例(C语言)
- python中如何获取类的属性,python – 获取类的属性
- Fashion Mnist中的softmax应用
- jfinal 和bjui 常用前后交互方式
- 我的世界旅行者地图服务器不显示,我的世界旅行者地图怎么没有传送 | 手游网游页游攻略大全...
- 电池充放电设备招投标解决方案
- LeetCode - Trangle
- 什么是集体户口,优势、劣势
- 二叉树的前序遍历、中序遍历、后序遍历
- 浅谈git rebase命令 -- git修改历史提交信息
- opengl显示北斗七星源代码
- 图像处理----图像模糊(高斯模糊)
- RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
- 效率源大容量硬盘检测修复程式 v3.0 光盘版 怎么用
- Flash For Server[FFS]
- volatile c 关键字
热门文章
- c语言取变量数据类型,C语言数据类型和变量
- 用WinFlash工具更新BIOS版本
- iPhone存储速度测试软件,13个软件打开速度测试,7部手机中iPhoneX只排第二
- HTML_超级链接详细讲解
- android4.4.4linux内核下载,Android 4.4源码下载
- java 源文件 编译jar_将java源文件制成jar包
- Spring5利用视图解析器生成Excel文件
- AP微积分与其跟着学校倒不如先跟着林老师学一一遍----美高学生如何说
- Oracle又裁员!工作10年,却被裁员!
- 如何计算无人机机架对应螺旋桨大小和尺寸!