为什么大前端时代, 很多人追求跨平台技术,我们却反其道走Native 客户端?
首先说一下,我们团队是深入调研过React Native, UniApp, Flutter, Electron,Tuari等各种各样跨平台技术的
最后我们选择了每个平台都用原生开发客户端,只是让JavaScript做内容跨平台的运行时框架
原因源于我很长时间的深度思考,知道我的人都知道我做了十几年Linux商业发行版的开发, 对底层技术、桌面技术和应用适配都非常擅长
我在过去的20多年时间内观察到这几个现象:
- 客户端技术是每个平台的护城河: 比如Koltion是Android的护城河, Swift是iOS的护城河, C#是Windows的护城河, C是Linux的护城河
2.巨头竞争意识:我们之所以不看好React Native和Flutter方案的原因不是我们认为这些团队技术不够好,而是我们认为Google、Apple、Micrsoft这些巨头会为了自己的利益,故意更新自己的Native技术,让这些跨平台技术相互不兼容。 所以, 我们之所以不选择现有的跨平台技术,是因为我们从长期看,这些技术都会因为巨头的更新而没法达到产品的稳定形态。而长期稳定是商业产品必须要考虑的一个决定性隐私
- JavaScript只适合页面跨平台,很多鼓吹JavaScript统一所有的平台的人,一定是没有做过跨平台开发的, 今天因为篇幅的关系, 我只举几个例子: 1)文件自动同步,JS不允许没有用户点击自动同步文件,所以本地相册同步,原生JS因为浏览器权限就没法实现; 2)摄像头相关的应用, 比如任何JS Camera库都无法实现二维码精准焦点聚焦, 这时候只能用原生相机组件才能实现各种商业场景的拍摄焦点要求; 3)网络和底层API, 这些API太多了, 原生大部分够不着,比如iOS,你不打开附近位置的功能,你都没法使用Wi-Fi P2P功能……这种商业依赖原生API的例子太多了,尤其是你们喜欢的大果子,各种原生API要求
所以,最后我们是怎么做的呢? 我们招了很多客户端的工程师,每个平台单独写原生的壳负责和平台操作系统调用底层API, 只在页面渲染上通过JS来实现跨平台。我们最终实现对Windows,Linux,macOS,Android,iOS,鸿蒙,车机,服务器,VR等9端跨平台客户端技术的支持