关于 hybrid APP 的技术选型问题

2022-04-08 15:31:51 +08:00
 cocoZombie

兄弟萌,我这边有个问题想问一下熟悉 h5 和 native 开发安卓应用的大佬。

1.具体情况如下 我们开发、生产、出售自己的安卓设备,这些设备在出厂的时候就预装了一些 APP ,这些应用拥有一些相同的功能,并且是使用 h5 来开发的安卓 APP 。APP 在使用过程中会用到蓝牙、摄像机、本地存储等安卓原生功能。

2.关于技术选型 我自己查了 cordova ,uniapp ,react-native ,flutter 。

3.担心可能出现的问题 我查阅了一下资料,发现 uniapp 可能是最合适的,但是担心使用过程中可能会出现一些无法预料的问题。比如没有足够多的第三方库,使得开发进度很慢

4.求助 想问一下使用过类似这种“跨平台解决方案”的朋友,哪种方案比较适合我们,或者有没有别的更合适的解决方案?这些方案有什么优缺点?

1647 次点击
所在节点    移动开发
14 条回复
chenqi777
2022-04-08 15:39:31 +08:00
react-native 或 flutter, 但是蓝牙、拍照、本地存储这些功能可能会遇到一些问题, 或者现有库无法满足需求,. 纯前端开发应该搞不定, 需要原生开发经验
lichdkimba
2022-04-08 15:41:09 +08:00
cordova 搞个简单的还行,复杂的太折磨了
retrocode
2022-04-08 15:41:44 +08:00
首先排除 cordova, 这玩意该埋进土里了.

如果只是做安卓的话, rn 和 flutter 应该是被优先考虑的, 毕竟插件好找

uni-app 的话,可能后面定制化会遇到问题, 他的 api 是为多端兼容准备的,很克制, 后面如果要高度定制某个功能,比如蓝牙他们的 api 不满足需求, 还是需要原生介入自行开发插件, 不过也不难, 用 uni-app 就不要指望第三方了, 尤其这种本地功能

就看你们对原生能力的依赖程度了, 可以先对着原型和 dcloud 官方的 api 看下是否合你们需求,毕竟 uniapp 出活快
chjieza
2022-04-08 15:44:38 +08:00
4 年前就在用 cordova 确实该埋了,使用所有原生的功能都需要先在外壳层由移动端开发人员先暴露。同意楼上,要看你们对原生功能的依赖程度
cocoZombie
2022-04-08 15:45:14 +08:00
@retrocode 非常感谢,我先去看一下 uniapp 的 api ,然后再看 rn 和 flutter 。
murmur
2022-04-08 15:59:55 +08:00
cordova 暴露原生也没那么麻烦,简单的插件大家都有,复杂的都得自己开发,问题是 cordova 坑是最小的,他的坑和 web 浏览器差不多

至于 rn 、flutter ,本身就带来新问题
murmur
2022-04-08 16:02:21 +08:00
摄像机这部分肯定是 native 了,还不如全 native 开发,你什么桥接到外面一个视频流都出问题
meteor957
2022-04-08 16:03:21 +08:00
rn
triptipstop
2022-04-08 17:03:43 +08:00
题外话,为什么 apicloud 没搞赢 dcloud 。
kytrun
2022-04-08 17:41:14 +08:00
murmur
2022-04-08 17:55:06 +08:00
@kytrun h5plus 也停更了,现在只更 uniapp
kop1989smurf
2022-04-08 17:57:20 +08:00
正常开发 h5 ,然后 webview 套壳。
app 和 js 通讯不管是哪方发起,都有标准 api 。
constance
2022-04-14 14:58:26 +08:00
用 cordova 的话,安卓端可以整一个 crosswalk 进去,webview 的兼容性问题应该就少了。

https://github.com/ks32/CrosswalkNative
cocoZombie
2023-09-14 10:40:56 +08:00
感谢大家的帮助,我们最后选择了 uniapp+自定义安卓基座的方式。我并不直接负责该项目,我只是做前期调研。
经过一年的使用,将结论写下来,让更多的人在遇到相似的问题时有所参考。
# 需求如下:
1. 跨平台
2. 会涉及硬件(蓝牙)调用
3. 业务逻辑较为复杂

结论:
# 无法应对如此复杂的场景。
首先是硬件调用,我们需要连接蓝牙外设,uniapp 的蓝牙 API 非常不好用。
蓝牙状态的回调会重复进行,搜寻广播信息会失败,断开后无法重连等问题。
虽然有些问题不致命,但是这会让开发者对框架产生不信任的感觉,起码我们在开发中经常产生“这框架是不是有问题?”、“卧槽蓝牙掉了?咋肥四啊?硬件组你们固件更新了啥?”,诸如此类的浪费时间的行为。
——————我是分割线——————
在进行了大半年的 uniapp+原始基座开发后,我们将蓝牙的连接全部放到了自定义安卓基座上面,即调用硬件的代码交由原生安卓编写,uniapp 端负责业务逻辑的实现。
目前情况就是这样,在此向所有回复的朋友道一声感谢,也向未来遇到技术选型的朋友建议,尽量选择原生框架进行开发,或者跨平台框架选择中,尽量选择可以加入原生代码的框架。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845722

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX