资讯专栏INFORMATION COLUMN

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

Carl / 1696人阅读

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

基于原生主要是针对基于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个基本问题:

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

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

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

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

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

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上线了。
这种跨平台的想法我估计大家都不难想到,但是从设想到实现到产品,国内还是少有的,我们的努力证明这种思路是可行的并能达到了很好的效果,希望给大家带来启发。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82138.html

相关文章

  • 基于原生移动平台研究实践

    摘要:基于原生主要是针对基于比较来说的,基于的我不想再讨论了,我想尝试的是从到功能都是原生,而不是用模拟的所谓原生体验。 基于原生主要是针对基于webview+h5比较来说的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,而不是用H5模拟的所谓原生体验。 背景 我们从开发角度来考虑,但凡想从事长远的开发工作,都有自己的技术积累,最简单的就是一些UI组件和功能组件的封装。 举例,...

    1treeS 评论0 收藏0
  • 【译】 eBay 速度与风范

    摘要:本文转载自众成翻译译者文蔺链接原文今年的顶级举措之一是为我们的用户提供一个更好的浏览体验。这意味着保持最少的。这些组件有全局的,网站速度信标现场速度信标套件,试验的库文件,以及统计模块等。它们在发布前要经历严格的回归测试,这就会增加延时。 本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/912原文:http://www.ebaytechblog...

    davidac 评论0 收藏0
  • 2021年8月国产数据库大事记

    摘要:本文整理了年月国产数据库大事件和重要产品发布消息。柏睿数据库加速安全卡面向全球重磅发布。月日,在全球数字经济大会成果发布会上,中国移动北京分公司与国产数据库领域新锐企业柏睿数据签署战略合作协议。本次大赛主要面向全国爱好数据库的高校学生。 本文整理了2021年8月国产数据库大事件和重要产品发布消息。目录8月国产数据库大事记TOP108月国产数据库大事记时间线产品/版本发布兼容认证8月排行榜新增...

    Scorpion 评论0 收藏0
  • 2021年9月国产数据库大事记

    .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body...

    suemi 评论0 收藏0
  • 一个程序员说。

    摘要:回顾一下整个过程,把我个人的学习历程分享出来,希望能对大家有所帮助。这让那些做和的程序员工资水平,像打了鸡血一样翻倍的往上涨,相比之下也让普通开发者者望尘莫及。 作者:star 终于完成了自己的一个App开发作品,这是一个真正意义上通过跨平台技术完成的纯原生体验App产品。回顾一下整个过程,把我个人的学习历程分享出来,希望能对大家有所帮助。谨以此文,献给像我一样在路上创业的小伙伴们,也...

    gaosboy 评论0 收藏0

发表评论

0条评论

Carl

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<