美文网首页
基于原生的移动跨平台研究和实践

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

作者: jonh_felix | 来源:发表于2017-04-20 13:30 被阅读0次

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

相关文章

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

    基于原生主要是针对基于webview+h5比较来说的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,...

  • WEEX快速入门

    WEEX 是阿里推送的一款基于Node.js,轻量级的移动端跨平台动态性技术解决方案,用于构建原生的速度的跨平台...

  • weex-toolkit weex脚手架

    WEEX 是阿里推送的一款基于Node.js,轻量级的移动端跨平台动态性技术解决方案,用于构建原生的速度的跨平台A...

  • Flutter了解

    Flutter:谷歌推出的开源跨平台移动应用开发框架(使用Dart语言开发)。 前言:原生开发与跨平台开发 原生开...

  • cordova 自定义插件

    cordova是一套跨平台的移动端框架,基于H5的同时又允许调用原生代码的特性使得开发和运行都能高效地运作。 官方...

  • 移动开发技术简介

    当前常见的移动开发技术主要分为原生开发和跨平台技术,下面就对各自进行简单的介绍。 1、原生开发   原生应用程序是...

  • 如何在 React Native 项目中使用 MQTT

    React Native 是 Facebook 推出并开源的跨平台移动应用开发框架,是 React 在原生移动应用...

  • Flutter 调研

    原理方向 闲鱼基于Flutter的移动端跨平台应用实践 10分钟读懂阿里巴巴高级专家在Flutter Live20...

  • cordova环境安装和插件使用

    cordova基于HTML、CSS和JavaScript的,用于创建跨平台移动应用程序的快速开发平台。能够利用iP...

  • Windows下搭建Appium(Android APP自动化测

    Appium是原生和混合移动移动应用自动化测试的跨平台解决方案,支持iOS、Android本地应用以及Hybrid...

网友评论

      本文标题:基于原生的移动跨平台研究和实践

      本文链接:https://www.haomeiwen.com/subject/ylclzttx.html