应用引擎概述

2018-06-17 17:09 更新

1、 引擎开源托管地址

iOS引擎托管地址: https://github.com/AppCanOpenSource/appcan-ios
Android引擎托管地址: https://github.com/AppCanOpenSource/appcan-android
自定义引擎开发资料在 [开发指导].开源&原生能力开发专题——《自定义引擎机制说明》部分均有详细介绍,在此不作赘述

2、关于AppCan引擎开源协议

AppCan引擎开源遵循LGPL宽通用公共许可证协议第三版: 英文版

3、应用引擎的技术原理

通过对各大手机操作系统(如iOS、Android)和系统中浏览器引擎底层Webview及其API的封装和扩展,将HTML标准中不提供支持的本地功能(比如摄 像头,短信,电话等)以Javascript API接口的形式开放给HTML页面调用,同时提供一套完整的Callback机制,实现HTML页面直接与操作系统底层的交互通信,Javascript脚本语言直接与操作系统C/C++/JAVA/Object-C等原生语言之间通信,实现系统与HTML页面的无缝融合;通过在UI层次上实现一套模拟系统级别的应用(Widget)及应用管理机制、窗口(Window)及多窗口管理机制,达到基于HTML5开发移动应用的目的,实现核心引擎的跨平台能力。

4、应用引擎的总体架构


应用引擎是一个支持HTML5应用运行的支撑平台,通过引擎在各平台上的适配来达到HTML5应用的跨平台执行。核心引擎主要由WidgetOne应用管理器、Widget 插件扩展机制,以及Native插件扩展机制三大部分组成。

4.1、WidgetOne应用管理器

WidgetOne应用管理器是整个Widget的运行环境,功能主要包括Widget管理、Widget内部窗口管理、Widget的生命周期管理、消息事件管理、Widget间通信机制和Widget的运行沙箱管理等。

所有的运行的Widget都有一个公共的父窗口WidgetContainer,Widget通过Widget的包名来标识,Widget之间可以相互调用,支持Widget间窗口切换和窗口动画,一个复杂的HTML5 应用可以由多个Widget来组成。而每个Widget有多个窗口组成,窗口通过ID/NAME来标识,每个Widget内部的窗口系统都相互独立,窗口之间支持相互调用,参数传递,窗口动画,窗口预加载机制,浮动窗口机制等

因此,多窗口机制在开发过程中很重要,根据不同的name来分辨不同的window(每一个应用中,有且只有一个name为’root’的窗口,一般把应用加载的第一个窗口默认的命名为’root’)。在不关闭窗口的情况下,它们之间可以通过uexWindow.open实现切换,而不用重新加载html页面。为了实现一些更好的用户体验,扩展了原生UI效果,比如ActionSheet,弹动效果等。它主要引进了主窗口和浮动窗口,这样多的目的就是固定top和bottom部分,避免这两部分随着滚动条滚动。

窗口的实现原理:

4.1.1、将设备屏幕可操作区域转换为Window的概念,通过拆分,将设备屏幕(Window)分成了Top,Bottom,Main,PopOver(浮动窗口)区域,每个区域由独立的WebView组成,相互独立,又相互通融,实现Window内的UI元素自由定义。

4.1.2、通过模拟系统UI元素压栈的方式(如Android平台的Activity栈),将创建的Window压入栈堆,通过对Window的命名,位置,大小,透明度,显隐等属性的控制,实现一套应用内支持创建多个Window,并对每个Window生命周期进行单独管理的机制,灵活管理Window的创建,显示,隐藏,复用,销毁,内存回收等。

4.1.3、实现一套浮动窗口机制。即,同一个Window中理论上可以创建足够多个数的浮动窗口,并且根据创建的先后顺序,覆盖到当前Window中来,形成一块独立的区域,解决了手机上不支持局部div滚动,不支持IFrame高度定义等的硬伤,以及配套的上下拉刷新效果,OAuth验证机制等功能的加入,增强了用户体验和为开发者降低了开发难度。

4.1.4、实现一套窗口间和窗口内浮动窗口间的交互机制。通过扩展的Javascript对象uexWindow对象下的诸多API,实现窗口间的交互。如uexWindow.evaluateScript(String inWindowName, String inType, StringinScript),可在任何一个Window中指定要在一个名为inWindowName的Window中执行Javascript函数;而uexWindow.evaluatePopoverScript(String inWndName, String inPopName,String inScript)则可在任何一个Window中指定要在一个名为inWndName的窗口下的名为inPopName的浮动窗口中执行Javascript函数。

4.1.5、实现窗口生命周期内的过度动画效果。如窗口创建并被添加到屏幕上时,指定一个从左到右的切入效果,窗口被关闭销毁时,指定一个从右到左的切出效果等等。基本达到了与系统级别UI界面切换效果的一致。

4.2、Widget 插件扩展机制

通过AppCan平台生成的应用,可以理解为一个Widget包(即在IDE创建项目是看到的’phone’文件夹),和一个 AppCan平台中间件组成的。通常的情况下,一个应用是由一个Widget+AppCan构成,那么,有没有可能说’n个Widget+AppCan’ 的机制呢,答应是肯定的,这就是Widget 插件机制,是针对主widget以及普通widget 的一种增强性的扩展机制,可以将具有特定功能的widget封装成一个单独的widget包存放到plugin 下,然后通过js扩展接口调用,以达到功能扩展的目的。我们把’1个Widget+AppCan’中的那一个Widget叫做’主Widget’,而另外 的’n-1’个Widget存在于主Widget的’plugin’目录下。

由于这部分资料在 [开发指导].开源&原生能力开发专题——《Widget插件扩展机制》部分均有详细介绍,在此不作赘述。

4.3、Native插件扩展机制

有了Native插件的配合使用,开发者只要写最简单的HTML,CSS和JS,就可以开发出一个体验效果和原生无差别的应用。

5、原生插件扩展开源及集成SDK

5.1、 AppCan开放了原生插件扩展机制,灵活的自定义插件扩展架构,方便开发者快速集成自定义功能到应用开发中。开发者将自定义原生插件进行开发和上传,即可在开发中直接调用。

5.2、 对目前平台提供的数十种应用插件进行开源,开发者可以根据自身业务需求来对开源插件进行扩展,或自行开发。

源码在官网插件库均可下载,分为终端设备系统调用API、界面API、网络API、多媒体API、第三方API等几个类别,足够覆盖移动应用开发中的大部分常用场景。其中包含新的支付宝插件和新百度地图SDK 封装的百度地图插件,备受关注的 QQ 登录功能插件、微信分享(支付)插件,以及推送、摄 像头、传感器、LBS、二维码、文件读写、网络连接、上传下载、短信、彩信、电话、邮件、图片、第三方支付、音频、视频、压缩、原生控件元素等核心功能。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号