跨平台技术方案解析

跨平台一般来说必须包含三个方面:

  1. UI跨平台
    即使用同一套UI布局或代码,能使其在不同的平台上的外观及对应的UI操作,比如:页面切换、点击、滑动等操作,表现一致
  2. 原生系统功能跨平台
    即使用统一的API能在不同的平台上唤起对应的平台特有的功能
    比如:拍照、文件存储、设备信息
  3. 实现成本比各个平台分别实现的成本低
    否则何必舍近求远

大概有以下几种实现方式:

  1. 利用编译过程,将代码编译为各平台的语言
  2. 使用一套底层的库,将页面画在原生系统的视图层
  3. 利用系统的公用组件或公用库
  4. 通过库打通到各类平台的语言间的桥梁

以下详细分析每一种方式的可行性

利用编译过程,将代码编译为各平台的语言

首先编译的目标肯定是对应系统架构的应用层
1. Android主要为Java、Kotlin
2. IOS主要为Objective-c、Swift
(不同的手机厂商对应的framework层都可能存在差异,适配的难度太大,不大可能拿到所有手机厂商间的差异 )

既然是编译为对应平台的语言,那么“UI跨平台”与“原生系统功能跨平台”都是通过编译之后的原生系统的代码来实现的,但是各平台间各平台间应用层接口差距也太大了,例如需要实现一个拍照方法:

  • Android上需要使用AndroidManifest文件配置相机使用权限,为相机预览使用一个SurfaceView、并使用Java的Camera打开相机并拍照
  • IOS上需要通过配置*-Info.plist文件配置相关权限,并使用AVFoundation设置信息并实现拍照

以此可见,仅仅拍照功能,各平台的应用层的实现方式差异实在太大,因此直接通过编译的方式,将代码编译为各类语言再运行的方式将造成 实现成本远远超出了两个平台分别实现的成本 而且随着平台数目的扩展,代价一定是指数级的攀升,因此并不可取

二 使用一套较为底层的库,将页面画在原生系统的视图层

  1. UI跨平台
    因为UI直接是使用的统一的库在页面上画出来的,因此外观与UI操作能够实现统一了
  2. 原生系统功能跨平台
    可以通过在库中统一封装一套对应的API接口来处理不同系统的功能

三 利用系统的公用组件或公用库

webview即是一个天然的每个系统都存在的跨平台的组件,虽说每个系统使用的webview不尽相同,但是以webview为基础的通用的api却大同小异,而且还有web标准或协议来限制不同平台的webview的差异,因此能在pc浏览器运行的web程序,能很快的移植到各个平台上并且保证其UI外观以及操作的一致性
而且各个平台可以通过webview做为载体,打通javascript与平台的桥梁,实现双向数据传递,因此定义好了各类原生系统的功能的接口之后,可以通过JavaScript来调用各个接口实现原生系统功能的调用
cordova即是以此方式实现的

四 通过库打通到各类平台的语言间的桥梁

以第三种方式为启发,若能直接打通两类语言之间的桥梁,实现数据的双向互传,那么无论是UI还是系统功能的调用都能通过定义好的接口协议来进行操作了,因此也有了VirtualDom的出现,VirtualDom只是一种定义好的数据结构,各个平台对于VirtualDom都有其自己的一套展示以及操作的方法,因此只要我们定义好了VirtualDom然后将其传到对应的平台上,通过不同平台上对应VirtualDom的相应实现就能得到不同平台上的相同的UI以及UI操作的展示了,原生系统功能的跨平台也能像第三种方式一样实现了
Facebook 的 React Native(基于React)、阿里巴巴的 Week(基于Vue)即是以类似方式实现

五 未来可能存在的方案

技术不断在发展,因此还可能存在其他的方式等待未来分晓了


作者:如羽灬 一个热爱技术的大前端开发者和架构师
个人网站:https://www.wanyan.site/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 最近出现的 React Native 再次让跨平台移动端开发这个话题火起来了,曾经大家以为在手机上可以像桌面...
    cosWriter阅读 2,367评论 0 12
  • 针对原生开发面临问题,人们一直都在努力寻找好的解决方案,而时至今日,已经有很多跨平台框架(注意,本书中所指的“跨平...
    小小的开发人员阅读 1,481评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 讲一个艳遇的故事,不是艳遇。 也不是我的故事,虽然故事里有我。 故事发生在古巴,时间离现在...
    简百万阅读 500评论 2 4
  • 楚河汉界传千古, 一兵一卒向前冲。 舍车保帅赢天下, 炮飞马踩象守城。 2017.11.26深夜
    白丰阁阅读 182评论 0 3