基于原生主要是针对基于webview+h5比较来讲的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,而不是用H5模拟的所谓原生体验。html
咱们从开发角度来考虑,但凡想从事长远的开发工做,都有本身的技术积累,最简单的就是一些UI组件和功能组件的封装。android
举例,我在一个App里实现了一个点击一下能自动切换背景颜色的Button,包括点击的动画效果,我确定会考虑封装成一个类,好比叫MyButton,在Android下它继承Button类, 在ios下它继承UIButton类。作下一个App,我要重用就把MyButton类文件直接拷贝到新项目里,或者引用一个jar包或a文件。ios
仍是不够,我还想进一步,我想让作App的开发和作原生的开发完全分离,原生开发人员不须要理解和接触任何App业务,只须要封装相似MyButton这种组件提供给App开发人员使用,而App开发人员是不须要懂android和ios技术的开发人员。ReactNative只能作到部分分离,作不到真正的跨平台,我想作到真正的一次开发跨Android和iOS平台,有没有可能实现,怎么实现?web
设想很简单,可是真正仔细去研究可行性,会发现巨量的问题和细节须要考虑和研究,我先列出19个基本问题:json
要跨平台,最基本的是选择一个第三方语言,若是考虑运行时确定首选JavaScript或lua之类的脚本语言。也能够像xamarin那样用编译型语言,不过难度确定更大。框架
若是要ui也跨平台,不考虑html的话,就得使用JSON或XML来描述ui层次结构。工具
若是用JSON和XML描述,就得须要有可视化的工具来方便用户开发ui,不然直接文本编辑不可想象。布局
若是使用JS,须要选择JS引擎,是JSCore仍是V8,这须要研究差别和优劣。动画
Android最基础的Activiy如何封装,在iOS对应UIViewControlller?生命周期怎么考虑?确定须要考虑多层,多层之间数据如何交互?ui
JS引擎实例整个App就用一个仍是多个?须要释放吗?如何释放?
Android的文件管理和iOS的如何统一?两者有类似处,也有很大差别。
线程怎么处理,容许App业务开发者直接构建和使用线程吗?
Android除Activity以外还有services等基础组件,iOS找不到对应的,如何统一?
虽然不是以H5为核心,可是webview确定要支持,那webview里的h5如何和原生交互?如何让webview加载的h5的js和跨平台框架的js之间通讯?
确定须要一个统一的事件机制,包括button点击这种系统事件的处理,也包括自定义事件,如何设计和实现android和ios的统一事件机制?
屏幕适配如何处理,这一块很是麻烦,咱们的目标是让App业务开发者尽可能不去考虑这种细节,如何设计和实现?
布局怎么设计,Android有不少布局类,iOS少一点主要是绝对布局,这一块如何统一?
相似列表类型的组件应该有一个统一的处理方式,列表的复用机制在android和ios里都有相似的概念,android用ListView,iOS用UITableView,怎么统一?
代码编写的时候怎么调试?修改一点ui或逻辑代码,如何立刻看到效果?可否单步?如何看到实时错误信息和调试信息?
Android和iOS的闪退怎么办?App开发者不懂android和ios如何面对闪退问题?
代码编写完了,如何打包生成Android和iOS的安装包?若是对外服务,如何替换证书,第三方的一些key,打包失败了怎么办,这须要一个完整的云打包服务,里面有不少问题须要解决。
怎么扩展功能?除了咱们之外,怎么能让其余原生开发人员来扩展功能?
如何实现组件插件化,能够根据须要裁剪,如何保证多个组件打包的冲突?
我只是列出一部分技术问题,并且每一个问题的不一样解决方案都会带来无数小的问题。咱们想实现这个框架对外服务,除了技术环节外,还有很多非技术的因素咱们暂且不提。
每一个问题的解决展开来均可以分析很长,因此咱们只能先整体上简单说一个大概。后续能够针对具体的问题再单独发文探讨。
调试和最终的发布App都是插件化,可裁剪的
有一个组件商店由咱们和其它原生开发者维护
App开发者利用可视化IDE拖拽ui,利用js代码编写逻辑,填充数据,更新ui
有一个云打包系统把App开发者开发的js代码和ui文件和原生开发的组件合并编译打包
核心框架包含运行时脚本引擎解析js代码,包含ui解析引擎解析json并构建原生ui树。
DeviceOne从2015年初开始设计开发,到2015年9月份发布,从发布到如今一年半了,它已经不是一个研究项目了,而是服务众多开发者的一个平台级产品了,有几百App上线了。这种跨平台的想法我估计你们都不难想到,可是从设想到实现到产品,国内仍是少有的,咱们的努力证实这种思路是可行的并能达到了很好的效果,但愿给你们带来启发。