您需要登录后才可以操作登录 | 立即注册
关闭
楼主
AppCan_小助
  • TA的每日心情
    开心
    2018-12-5 13:27
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    [社区事务] AppCan 移动应用引擎开源说明 + 下载地址   [复制链接]

    40918 19 发表于 2014-12-23 11:15:03

    亲爱的广大开发者:

    AppCan于12月23日下午15点,全面开源服务平台应用引擎

    AppCan 源码托管地址: https://github.com/AppCanOpenSource

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

    【应用引擎的技术原理】

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


    【应用引擎的总体架构】

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

    引擎架构图1.jpg

    一、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部分,避免这两部分随着滚动条滚动。

    窗口的实现原理:
    (1)将设备屏幕可操作区域转换为Window的概念,通过拆分,将设备屏幕(Window)分成了Top,Bottom,Main,PopOver(浮动窗口)区域,每个区域由独立的WebView组成,相互独立,又相互通融,实现Window内的UI元素自由定义。
    (2)通过模拟系统UI元素压栈的方式(如Android平台的Activity栈),将创建的Window压入栈堆,通过对Window的命名,位置,大小,透明度,显隐等属性的控制,实现一套应用内支持创建多个Window,并对每个Window生命周期进行单独管理的机制,灵活管理Window的创建,显示,隐藏,复用,销毁,内存回收等。
    (3)实现一套浮动窗口机制。即,同一个Window中理论上可以创建足够多个数的浮动窗口,并且根据创建的先后顺序,覆盖到当前Window中来,形成一块独立的区域,解决了手机上不支持局部div滚动,不支持IFrame高度定义等的硬伤,以及配套的上下拉刷新效果,OAuth验证机制等功能的加入,增强了用户体验和为开发者降低了开发难度。
    (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函数。
    (5)实现窗口生命周期内的过度动画效果。如窗口创建并被添加到屏幕上时,指定一个从左到右的切入效果,窗口被关闭销毁时,指定一个从右到左的切出效果等等。基本达到了与系统级别UI界面切换效果的一致。

    二、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'目录下。

    由于这部分资料在官网文档均有详细介绍,在此不作赘述

    三、Native插件扩展机制

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

    首先,AppCan开放了原生插件扩展机制,灵活的自定义插件扩展架构,方便开发者快速集成自定义功能到应用开发中。开发者将自定义原生插件进行开发和上传,即可在开发中直接调用。
          
    其次,对目前平台提供的数十种应用插件进行开源,开发者可以根据自身业务需求来对开源插件进行扩展,或自行开发。
    源码在官网插件库均可下载,分为终端设备系统调用API、界面API、网络API、多媒体API、第三方API等几个类别,足够覆盖移动应用开发中的大部分常用场景。其中包含新的支付宝插件和新百度地图SDK 封装的百度地图插件,备受关注的 QQ 登录功能插件、微信分享(支付)插件,以及推送、摄 像头、传感器、LBS、二维码、文件读写、网络连接、上传下载、短信、彩信、电话、邮件、图片、第三方支付、音频、视频、压缩、原生控件元素等核心功能。

    自定义插件扩展详细资料可查看:http://newdocx.appcan.cn/index.html?templateId=257
    iOS Native插件扩展机制请了解:http://newdocx.appcan.cn/index.html?templateId=261
    Android Native插件扩展机制请了解:http://newdocx.appcan.cn/index.html?templateId=247

    文档已经发布,可在文档中心查看,附上链接地址:http://newdocx.appcan.cn/index.html?templateId=410



    AppCan全体运营团队
    2014年12月23日

    地板
    阿剑

    该用户从未签到

    显示全部楼层 发表于 2014-12-24 08:46:55
    好像Andriod版本的libappcan.so,和ios版本的libAppCanEngine.a没有开源哦
    5#
    微笑的狼
  • TA的每日心情
    开心
    2017-2-24 10:09
  • 签到天数: 261 天

    连续签到: 2 天

    [LV.8]以坛为家I

    显示全部楼层 发表于 2014-12-24 09:20:32
    阿剑 发表于 2014-12-24 08:46
    好像Andriod版本的libappcan.so,和ios版本的libAppCanEngine.a没有开源哦

    libAppCanEngine.a是有的
    libappcan.so貌似没有
    6#
    阿剑

    该用户从未签到

    显示全部楼层 发表于 2014-12-24 09:32:14
    主要是官方还没发布相关文档
    8#
    光辉2010
  • TA的每日心情
    开心
    2016-11-14 20:08
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    显示全部楼层 发表于 2014-12-24 16:37:22
    必须赞一个!
    9#
    felicity
  • TA的每日心情
    开心
    2017-1-10 16:45
  • 签到天数: 108 天

    连续签到: 1 天

    [LV.6]常住居民II

    显示全部楼层 发表于 2014-12-26 10:34:44
    把这源码都搞懂,就成大牛了
    10#
    wuhanfengchao
  • TA的每日心情
    奋斗
    2015-1-20 18:20
  • 签到天数: 92 天

    连续签到: 1 天

    [LV.6]常住居民II

    显示全部楼层 发表于 2014-12-28 21:55:46
    非常赞,非常谢谢!相信一定会更快速发展的。
    还有一些帖子被系统自动隐藏,点此展开
    主题:
    级别:游客
    发帖:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表