跨平台技术方案解析

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

  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/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

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