APP开发,如何选择技术栈?从原生到跨平台,结合业务选最优解

APP开发,如何选择技术栈?从原生到跨平台,结合业务选最优解

移动互联网发展到今天,早就过一个APP就能火爆火的时代,但好的产品却从不缺用户,比如:ChatGPT APP、微信、抖音、刚上架的灵光APP这些现象级应用。

但现在大家做创业类AI 相关的APP产品,除了会考虑APP业务、体验、基建和生态等等因素,最重要也会考虑降本增效存量博弈

最近有不少做技术管理者、以及一些创业的朋友问我,我们AI应用想做移动版APP,怎么选技术栈,

用原生(Native),还是Flutter,还是RN,还是干脆套个壳用H5来包装个?”

这个问题没有标准答案,但可能有最优解

今天我从移动开发的技术演进、成本算账、以及业务场景匹配这几个维度,我们来分析下把技术选型这笔账算清楚。

一,移动端技术演进: 从原生到跨平台

要选型技术,先得知道我们手里的牌是怎么来的,要知道自己产品的业务是什么样的,业务在APP上的表现是怎么样的,纯交互还是互动类,是否要依赖设备能力的,比如,视频类解码,比如地图定位,比如传感器。

这些先前的考虑,本质上就是既要又要的权衡,想要体验好(原生)和想要省钱快点上线(跨平台),同时还是要考虑业务发展,选错了技术栈,后续在建也是不小的支持。

比如,你应用属于重依赖设备的,比如地理位置与设备重交互,社交或视频类、依赖原生设备能力通道的,那也不要为了省去选择不成熟的技术栈,从而阻碍了业务发展。

那到底怎么选?我们看下APP技术的几个选项代表。

1. 原生开发: 依旧性能和体验王者

在iOS和Android刚起步时,没得选。你想做APP,就得招两波人:一波写Objective-C/Swift(iOS),一波写Java/Kotlin(Android),应用性能、体验都是最好的,而且可以根据自己平台的特性,使用系统封装的一些组件。

聊聊原生开发的现状:

原生的好处太多,唯一不好得地方就是需要2个团队来开发Android和iOS,但是其他地方完全可以碾压其他技术栈来做APP,参考微信,抖音这种,还有一些特定工具类还必现是原生,否则无法使用原生底层能力。

在AI时代下,开发和2个应用也已经不是太难的事情了,也有双栈的开发人员了。

如果要考虑到大体量或者对性能有极致要求的工具类APP、想体验好、高品质,这些必用原生开发。反之,纯原生开发可能成本一开始会高,如果你想试水而已,那可以先不用考虑原生方案。

2. PhoneGap/H5/Hybrid:取巧玩法,性能隐患

早期的PhoneGap(Cordova)想了个招:给APP做个原生的壳,里面塞个浏览器(WebView),大家写网页就行了。这样就解决了2端开发问题,只需要用webview和加载页面就可以了。但是,还是需要会原生的人来进行封装和对接。

看看这个现状: 这种技术来应用体验极差,滑动卡顿,交互僵硬,尽管现在有所优化,但是毕竟加载H5,及资源,到渲染还是需要时间的,这在移动端上是很难受的。除了极简单的内部管理软件,现在基本没人单纯用这个技术栈做商业级APP了。这种技术栈除了一些老的项目或者政府类有在用(你大概知道原因),公司类没有人在用这项技术了。

当然,一些广告页、APP里抽奖类等,运营类还是会嵌入个H5来做,适合频繁更改落地页,不考虑用户体验的页面还会用H5。Hybrid的方式也是很多混合开发APP里最成熟的方案。

如果是纯粹的H5 包装出来的APP,在开发新的APP上没有人用这项技术了。

3. 桥接派(React Native / Weex): 有提升、有担忧

Facebook推出了React Native(RN),可以理解为它不渲染网页,而是用JS去指挥原生的控件干活。这样的情况下,会多一层通信和桥接的方式。

RN的桥接原理

  • 现状: 体验比H5好太多,布局由 Yoga 快速计算,事件由原生线程分发和渲染,但因为中间隔着一层Bridge来通信,遇到复杂的动画或者长列表,性能还是会掉链子。新架构用 JSI/Fabric 大幅减少 JS 与原生的通信成本,但还不能完全达到原生,但是好太多了。

4. 自绘引擎(Flutter): 自绘制引擎,从根源解决

Google看不下去各种妥协,推出了Flutter。他最大的特点是引入了自绘制的引擎,这样不需要通信了,直接去绘制控件,但是他调用各端设备提供的能力还是需要通道的,但这个损耗很小。

但是,Flutter的开发需要一种新的开发语言Dart ,但性能会很很多了,尽管有时需要统一的2端进行支持。

Flutter跨平台渲染过程

它既不借用系统控件,也不用WebView,而是自己带了个渲染引擎(Skia),直接通过各端的GPU 进行绘制到屏幕上。目前看算是比较理想的跨平台技术选型。

但是他也有一些弊端,需要每端的开发人员在进行与原生交互的还是,还是要做一些通道工作的,而且UI的还原度还是不太完全与原生相比,包体积也会增大一些,在一些负责的页面上,比如:嵌入多个原生 Fragment / ViewController已经堆栈管理上,还是会跟麻烦,这样反而无形增加了很多工作量。

二,从技术和业务成本来对比下

为了让大家更直观地做决定,我整理了一个对比表格。这里不谈虚的,只谈钱、效率和结果。

维度原生开发 (Native)FlutterReact Native (桥接类)Uni-app / H5混合
开发语言Swift / KotlinDartJavaScript / TypeScriptVue / JS
团队配置 (iOS+Android) (一套代码+会iOS/懂Android) (前端+原生) (前端)
性能体验极致接近原生良好凑合用
UI一致性依赖平台实现一般 (依赖原生组件)一般
包体积中 (带引擎)
热更新难需审核)难 (Shorebird方案) (CodePush)

我的一些看法:

  • 如果追求性能,业务发展也需要,追求品质,不差钱,选原生。
  • 如果业务影响不大,节省成本,可以部分引用flutter,可能还需要Android和iOS懂点的人辅助开发。
  • Uni-app 这类在国内是个特殊的存在,如果只是国内,比如政府类接的简单项目、事业单位小APP, 可以选择该类平台,或者一锤子买卖的项目,可以选用,否则不要选。

三, 给一些决策参考

我们进一步展开来看下,其实技术栈没有好坏,只有适不适合。早期有团队硬推RN、Flutter其实很多为了所谓创新和KPI,也有很多团队发现用了这些反而成本在增加,因为一些负责的页面,在不成熟使用这些技术,反而是个黑洞。

早期比较出名的airbnb、以及闲鱼APP都是很好的例子,折腾了半天很多也放弃跨平台,重合原生阵营。

比较原生的技术和平台底层在发展,而真正的跨平台只是相对的,如果是长期使用的APP不要选择跨平台也是一个不错的选择。

但如果给些参考的还是可以的:

1. 判断使用Flutter的情况

预算有限,但对UI设计还原度要求高。设计师给了一套非常炫酷的UI,希望在iOS和Android上看起来一模一样。团队里有一些会基本的 Android和iOS的人,但也不是很精通,希望通过flutter快速实现一些简单页面,缩短研发周期。

  • 团队人员方面,有学习开发语言的动力Dart开发

  • 产品的业务界面简单,只做展示类,与手机硬件交互能力少。

  • 产品属于前期验证(接受后期推到重建原生), 项目周期短,也有懂Android和iOS人。

  • 希望APP有一定的逼格,同时要具备好的性能和界面。

符合以上情况的,建议可以选择Flutter

2. 判断使用React Native的情况

如果已经有了APP,基于这个APP在做维护和迭代的情况,可能是基于原生开发的,想在里面嵌入一些动态更新的模块(但现在很多都走应用市场更新了)这个确实现在不太重要,除非是金融类,交易类等必须减少损失。

  • 考虑到动态化更新的场景比较重要的情况

  • 团队人员方面都是从web前端人员比较多,Android和iOS的人员很少或者没有。

  • 不考虑APP的包大小,以及性能加载速度可在业务的接触范围内。

  • 项目已经是比较稳定的,处于稳定迭代或者小的更新阶段可以考虑

  • 同样APP业务简单,与设备交互和性能影响可以容忍,比如只展示类和填写类APP。

3. 用Uni-app这类的情况

主打国内老板要求的这种业务,既要又要,但不关心体验,只关心乱七八糟上线有就行,还有有微信小程序、抖音小程序也要有,Android和iOS都要。

  • 核心是我知道APP烂,但我要的是覆盖,花最少的前,撑最多场面的这种应用。

  • 一锤子交付,维护在说,先有个APP东西的。

  • 到时搞不定技术和产品的,能搞定人的业务。

这种不要考虑太多,直接用这类来做技术栈,后期在搞在说后期的事情,主动一个不顾效率和常见,只要现在交付的,不要犹豫,就用这个。

4. 原生判断的情况

但凡,对APP有点追求和品质,特别在AI时代下,要快和体验,又能快速跟上各平台新的API生态的,必选Android和iOS来开发。

以及有些场景必须要明确知道的,否则选错,不用原生后边的代价可能会非常大。

  • 跟硬件设备相关的,蓝牙锁、智能家居控制、音视频编解码、AR/VR应用这类业务。(用跨平台技术会坑死)
  • 工具类、交易类、金融类APP,重安全和业务的,不要想直接用原生。
  • 超级APP,这些之前讲过,抖音,微信,淘宝,不止原生,底层网络,通信都会用Rust/C++重做的,不要想底座肯定选原生。
  • 基于原生系统来交互做的APP的业务,比如壁纸类、通知类、社交类,通信类等等,需要原生能力,不用考虑直接原生。

四, 专门聊聊小程序

很多人会纠结:“现在小程序这么火,我还有必要开发APP吗?”

“小程序已经把APP取代了,这种情况是说明对移动上的应用和使用场景还是不够清楚。”

个人认为,小程序是轻量级的应用,一个比较好的比喻,通过小程序我们快速上车体验,但真正到达目业务目的还是要靠APP做私域,一个是路,一个是家的概念

具体还是要结合自己的产品业务属性,是适合在路上,还是需要把用户请到家里。

小程序在国内是一个流量的捕获器,优点是获客成本低,即用即走的很好场景,但也很难发展其他留存动作。最重要,功能受限,比如不能长时间后台运行,不能做太复杂的操作。

小程序一定要结合业务来判断技术选型,是否需要完整掌控用户体系、推送触达和深度交互,收集数据和路径迭代产品,如果是MVP验证和小产品项目,只是网络请求或者显示,查一查,那可以考虑小程序。

五,最后我们总结下

作为老板,创业者或技术决策者,我们在做移动端APP上技术选型时,需要从成本、时间、技术、后期维护等综合来考虑,希望以上思考可以提供帮助。

从商业本质,技术的价值在于解决问题,成就业务

  • 如果你的目标是极致体验、性能、行业壁垒和标杆,业务属性要求,选原生绝对没错。

  • 如果你的目标是活下去,先试试看,考虑Flutter/RN混合,团队也要有原生人支持。

  • 如果是外包类和小项目,只关心交付,不考虑使用和维护,Uni-app这类代表可以考虑。

希望这篇文章能帮你在这个存量竞争的时代,少走弯路,把钱和精力花在刀刃上。

版权声明

本文作者:良技漫谈

本文链接:https://www.ljmt.online/blog/how-to-choose-app-dev/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

分享 :
comments powered by Disqus

相关文章

为什么我推荐用Hugo的Hugoplate搭建个人网站

为什么我推荐用Hugo的Hugoplate搭建个人网站

由于种种原因,准备启用新的个人网站,在选择搭建的时候这次使用了hugo,通过AI的协助,在很快的时间内完成了搭建和上线。

阅读更多