基于原生的移动跨平台研究和实践

发布时间:2019-06-10 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了基于原生的移动跨平台研究和实践脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

基于原生主要是针对基于webview+h5比较来说的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,而不是用H5模拟的所谓原生体验。

背景

我们从开发角度来考虑,但凡想从事长远的开发工作,都有自己的技积累,最简单的就是一些UI组件和功能组件的封装。

举例,我在一个App里实现了一个点击一下能自动切换背景颜色的Button,包括点击的动画效果,我肯定会考虑封装成一个类,比如叫MyButton,在AndROId下它继承Button类, 在ios下它继承UIButton类。做下一个App,我要重用就把MyButton类文件直接拷贝到新项目里,或者引用一个jar包或a文件。

还是不够,我还想进一步,我想让做App的开发和做原生的开发彻底分离,原生开发人员不需要理解和接触任何App业务,只需要封装类似MyButton这种组件提供给App开发人员使用,而App开发人员是不需要懂android和ios技术的开发人员。ReactNative只能做到部分分离,做不到真正的跨平台,我想做到真正的一次开发跨Android和iOS平台,有没有可能实现,怎么实现?

问题

设想很简单,但是真正仔细去研究可行性,会发现巨量的问题和细节需要考虑和研究,我先列出19个基本问题:

  1. 要跨平台,最基本的是选择一个第三方语言,如果考虑运行时肯定首选JavaScript或lua之类的脚本语言。也可以像xamarin那样用编译型语言,不过难度肯定更大。

  2. 如果要ui也跨平台,不考虑htML的话,就得使用JSON或XML来描述ui层次结构。

  3. 如果用JSON和XML描述,就得需要有可视化的工具来方便用户开发ui,否则直接文本编辑不可想象。

  4. 如果使用JS,需要选择JS引擎,是JSCore还是V8,这需要研究差异和优劣。

  5. Android最基础的Activiy如何封装,在iOS对应UIViewControlller?生命周期怎么考虑?肯定需要考虑多层,多层之间数据如何交互?

  6. JS引擎实例整个App就用一个还是多个?需要释放吗?如何释放?

  7. Android的文件管理和iOS的如何统一?二者有相似处,也有很大差异。

  8. 线程怎么处理,允许App业务开发者直接构建和使用线程吗?

  9. Android除ActivITy之外还有services等基础组件,iOS找不到对应的,如何统一?

  10. 虽然不是以H5为核心,但是webview肯定要支持,那webview里的h5如何和原生交互?如何让webview加载的h5的js和跨平台框架的js之间通信?

  11. 肯定需要一个统一的事件机制,包括button点击这种系统事件的处理,也包括自定义事件,如何设计和实现android和ios的统一事件机制?

  12. 屏幕适配如何处理,这一块非常麻烦,我们的目标是让App业务开发者尽量不去考虑这种细节,如何设计和实现?

  13. 布局怎么设计,Android有很多布局类,iOS少一点主要是绝对布局,这一块如何统一?

  14. 类似列表类型的组件应该有一个统一的处理方式,列表的复用机制在android和ios里都有类似的概念,android用ListView,iOS用UITableView,怎么统一?

  15. 代码编写的时候怎么调试?修改一点ui或逻辑代码,如何马上看到效果?能否单步?如何看到实时错误信息和调试信息?

  16. Android和iOS的闪退怎么办?App开发者不懂android和ios如何面对闪退问题?

  17. 代码编写完了,如何打包生成Android和iOS的安装包?如果对外服务,如何替换证书,第三方的一些key,打包失败了怎么办,这需要一个完整的打包服务,里面有很多问题需要解决。

  18. 怎么扩展功能?除了我们以外,怎么能让其他原生开发人员来扩展功能?

  19. 如何实现组件插件化,可以根据需要裁剪,如何保证多个组件打包的冲突?

我只是列出一部分技术问题,而且每个问题的不同解决方案都会带来无数小的问题。我们想实现这个框架对外服务,除了技术环节外,还有不少非技术的因素我们暂且不提。

方案

每个问题的解决展开来都可以分析很长,所以我们只能先总体上简单说一个大概。后续可以针对具体的问题再单独发文探讨。

基于原生的移动跨平台研究和实践

  1. 调试和最终的发布App都是插件化,可裁剪的

  2. 有一个组件商店由我们和其它原生开发者维护

  3. App开发者利用可视化IDE拖拽ui,利用js代码编写逻辑,填充数据,更新ui

  4. 有一个云打包系统把App开发者开发的js代码和ui文件和原生开发的组件合并编译打包

  5. 核心框架包含运行时脚本引擎解析js代码,包含ui解析引擎解析json并构建原生ui树。

实践

DeviceOne从2015年初开始设计开发,到2015年9月份发布,从发布到现在一年了,它已经不是一个研究项目了,而是服务众多开发者的一个平台级产品了,有几百App上线了。
这种跨平台的想法我估计大家都不难想到,但是从设想到实现到产品,国内还是少有的,我们的努力证明这种思路是可行的并能达到了很好的效果,希望给大家带来启发。

脚本宝典总结

以上是脚本宝典为你收集整理的基于原生的移动跨平台研究和实践全部内容,希望文章能够帮你解决基于原生的移动跨平台研究和实践所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。