V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leconio
V2EX  ›  问与答

求助帖,做过跨端(iOS 和 Android)开发的看过来

  •  
  •   leconio · 2019-06-08 13:18:09 +08:00 · 3297 次点击
    这是一个创建于 2020 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近项目组要搞重构,之前只有 Android 端,现在的要求是 Android 和 iOS 都可以用。项目比较庞大,总代码行数在 30W+(包括 google 库),其中大部分代码是业务逻辑。项目是什么名字这里不方便说,总之是一个业务逻辑十分庞大的工具类 App,不涉及金融。 目前的跨端方案有大概几种:ReactNative、Weex、Flutter 以及 WebView 容器的 Hybrid。Hybrid 基本上可以直接否掉,App 对性能有一定的要求,所以大概只能在前面三者里面选。

    首先:ReactNative 和 Weex 都使用 JavaScript 语言进行开发,这样就会有一个问题,弱类型语言在修改参数类型的时候,如果出错的话不会在编译时候报出来。由于项目比较庞大,每次发版不可能把每一个功能点都回归到。万一修改了一个参数类型,影响没有回归到的功能的话,就可能影响整个线上。那么 TypeScript 是否可以解决这个问题?

    如果 TS 可以解决上面的问题,那么 ReactNative 和 Weex 的社区环境怎么样呢,ReactNative 有 20 多万的 userby,weex 只有 9 个。据说 weex 迁到了 Apache,可能有一定的影响。如果要选择,要考虑以下几点:

    • 热更新
    • 开发效率
    • 学习成本(组内全是 Android 开发)
    • 构架大型项目的能力
    • 视图交互能力,比如把 Android 的 SurfaceView 嵌入到其中,作为部分展示(必须)
    • 活跃的社区

    那么大家更倾向 ReactNative 还是 Weex 呢?

    那么说说 Flutter: Flutter:Flutter 使用 Dart 语言构建,可以规避上面的问题。我个人更倾向于 Flutter,毕竟上面的坑已经趟的差不多了,除了热更新基本都可以实现。但是 Flutter 毕竟是个新鲜的产物,公司的架构委员会可能不会批准,但是回过头想想,Android 刚出世的时候还不是坑一大堆,毕竟社区活跃呀,坑多人更多呀,坑总要有人或者公司带头填,不过大环境下的架构师都会选择稳定(坐享其成!),毕竟是个出了问题就涉及到背锅。

    一线开发不好做呀,既要考虑技术要点,又要临危受命考虑领导能不能挺你!

    31 条回复    2019-08-19 10:10:27 +08:00
    ilotuo
        1
    ilotuo  
       2019-06-08 16:10:40 +08:00
    马克。顶。路过踩踩。
    roshad
        2
    roshad  
       2019-06-08 16:15:13 +08:00
    xamarin 想都没想过么
    Bijiabo
        3
    Bijiabo  
       2019-06-08 16:38:41 +08:00
    感觉主要还是看生态,以及初期能不能找到有经验的合适的人,可能还是 React Native 相对更加合适一些。
    baojiweicn2
        4
    baojiweicn2  
       2019-06-08 16:51:22 +08:00 via Android
    rn 或 flutter。flutter 不行就只有 rn 了。rn 挺好用的
    leconio
        5
    leconio  
    OP
       2019-06-08 20:08:58 +08:00
    @ilotuo 谢谢帮踩
    leconio
        6
    leconio  
    OP
       2019-06-08 20:09:58 +08:00
    @roshad 主要是项目组没有一个会 C#的,而且,它构建项目怎样,据说要做很多平台化处理
    leconio
        7
    leconio  
    OP
       2019-06-08 20:11:37 +08:00
    @Bijiabo
    @baojiweicn2
    如果 Flutter 被否掉,我也会更倾向 ReactNative 一些,毕竟社区更加活跃。就是很担心 JavaScript,在很多业务的情况下,会不会开发效率还不如 Java
    HarryQu
        8
    HarryQu  
       2019-06-08 21:40:08 +08:00 via Android
    项目大的,定制性要求高的,对性能要求高的,对崩溃率要求低的,对适配机型要求多的。 老老实实原生开发,不要用什么跨平台框架,你会被产品搞崩溃的。

    要求不高的用 rn 或者 flutter。weex 请忽略。
    daquandiao2
        9
    daquandiao2  
       2019-06-08 21:54:40 +08:00
    weex 做的体验不如原生 rn 原理和 weex 差不多 也会有类似问题
    你打开手机淘宝看看就知道了 里面挺多 weex 页面了
    murmur
        10
    murmur  
       2019-06-08 22:09:54 +08:00
    先排除 weex,既然 weex 是阿里搞出来的,阿里的闲鱼在吹 flutter,那 flutter 也可以排除,最后选择 react native
    beimenjun
        11
    beimenjun  
       2019-06-08 22:10:18 +08:00
    还有一种,用 Kotlin 写一个 Core,把所有业务逻辑搬到 Core 里面,然后两套 UI 各自做各自的内容。

    优势:不需要什么社群支持
    劣势:人员需求量比较大
    MuscleOf2016
        12
    MuscleOf2016  
       2019-06-08 22:15:38 +08:00
    weex 还是算了,虽然自己公司的项目在用,不过 weex 实在太粗心了,自己文档都好几处错误。
    hyyou2010
        13
    hyyou2010  
       2019-06-08 22:26:40 +08:00
    单机版产品?

    如果要用 flutter 的话,最好去 flutter 社区或微信群找有经验的同学咨询一下,以防万一有跨不过的坑,尤其是所谓大型项目。目前国内使用 flutter 的几家都是大厂,似乎只应用在少量页面上,这点也建议在社区中咨询一下。

    安全起见就原生。我是老板也选择原生。
    wd
        14
    wd  
       2019-06-08 23:19:37 +08:00 via iPhone
    你们如果没有自己专门的团队维护基础框架的话,平时应付框架和各种第三方自带的组件就够你们喝一壶的了,别的要求基本是想象了,能一定程度解决跨平台就是万幸了
    wd
        15
    wd  
       2019-06-08 23:26:29 +08:00 via iPhone
    rn 这么多年了还一堆坑,flutter 才几天。这个东西还需要考虑第三方组件的丰富程度,你总不能遇到需求就自己封一套组件吧,那比 native 开发都累
    janus77
        16
    janus77  
       2019-06-08 23:37:37 +08:00 via iPhone
    招会 ios 原生开发技能的人是必须的,因为像你所说的 surfaceview 这种级别的性能必须原生提供,而且 ios 的编译打包发布修 bug 等流程是需要人的
    再问答问题,如果你必须要做跨平台而且考虑稳定性,那 rn 目前是唯一选择。
    个人答案还是希望有原生应用,把部分功能模块迁移到混合式( rn ),然后根据你们的人力成本一步步渐进式迁移。
    whypool
        17
    whypool  
       2019-06-08 23:57:53 +08:00
    重构一时爽....

    有性能要求还是原生,其他方案都不行,rn 都不行

    非要搞出来,就拆分产品,保留高性能原生部分,能替代的,三大框架选一个熟悉的就行
    Bijiabo
        18
    Bijiabo  
       2019-06-09 01:02:21 +08:00
    @leconio React Native 本身应该不会成为限制业务实现的瓶颈,可能关键还是在于软件管理。
    对性能要求高的部分上原生 View 或者新开一个线程跑,我们去年开始用 React Native 开发物联网相关的应用,确实遇到了一些性能问题,优化一下问题不大。

    感觉还是要产品设计与技术实现深度配合,如果 RN 搞不定,可以适当调整需求,找到平衡点,并不是一味的「就要这样」,真的遇到性能瓶颈了,也可以趁此机会讨论下「这个需求真的合理么」、「也许没必要这么做」。
    baojiweicn2
        19
    baojiweicn2  
       2019-06-09 08:07:23 +08:00 via Android
    @leconio 你是指的开发效率还是单纯的运行效率,开发效率应该是最高的吧,如果对 rn 熟悉的话,一堆的脚手架和模板都是现成的,除非有坑,其他方面还是蛮快的
    0xcb
        20
    0xcb  
       2019-06-09 09:58:37 +08:00 via Android
    收藏了,看来都推荐 RN,原生开发换 RN 做界面会不会一开始开发效率变低,学习曲线如何
    leconio
        21
    leconio  
    OP
       2019-06-10 10:02:09 +08:00
    @HarryQu 是呀,但是现在互联网届正在过冬,在养一个几十人的 iOS 估计不太现实。
    leconio
        22
    leconio  
    OP
       2019-06-10 10:04:49 +08:00
    @daquandiao2
    @murmur
    项目有很多的业务,估计 weex 和 rn 技术站 hold 不住。主要是怕业务越来越多的情况下,冗杂的代码会使项目开发效率越来越低
    leconio
        23
    leconio  
    OP
       2019-06-10 10:05:21 +08:00
    @beimenjun iOS 好像不能运行 jvm 吧,我倒是想过用 go,哈哈哈哈
    leconio
        24
    leconio  
    OP
       2019-06-10 10:06:14 +08:00
    @MuscleOf2016 是呀,我就是再探文档的坑的时候发的这个求助帖,感觉文档比较老了
    leconio
        25
    leconio  
    OP
       2019-06-10 10:07:24 +08:00
    @hyyou2010 弱联网 App,无网情况下也可以工作,待有网上传业务数据,不过重构想把它改成强联网 App。
    leconio
        26
    leconio  
    OP
       2019-06-10 10:09:00 +08:00
    @wd 没有第三方框架,不管地图,支付还是什么组件,都是自研,支付是直接对接。你这么一说我到想到了,如果我们改变了技术栈,公司其他平台架构好像都要变- -
    murmur
        27
    murmur  
       2019-06-10 10:20:25 +08:00
    @0xcb rn 是对前端友好,因为用了前端熟悉的技术栈和语法,真正到最后都是拼 native
    hyyou2010
        28
    hyyou2010  
       2019-06-10 10:29:32 +08:00
    有服务器的话,可以把大量业务逻辑放后端,前端跨平台就容易多了
    NonClockworkChen
        29
    NonClockworkChen  
       2019-06-10 10:33:56 +08:00
    建议你们调研一下,RN 的组件有多少没有覆盖你们的原生功能。
    大型 App 用 RN 真的是噩梦,更别提 RN 各种闪退 bug。
    老老实实用原生 iOS,真的比 RN 更省钱!
    wd
        30
    wd  
       2019-06-10 20:55:22 +08:00 via iPhone
    @leconio #26 如果你们有能力自研,那 rn 可以把一部分逻辑双端一次实现,还是挺不错的。代价就是出问题的时候复杂度变高很多,有些 rn 自己的 bug 很难弄。
    yurnery
        31
    yurnery  
       2019-08-19 10:10:27 +08:00
    @HarryQu 我觉得这个老哥说得对.
    1. 要跨端就只有 RN 和 Flutter, 其他的可以忽略了.
    2. 我们现在就是用的 RN, 一开始开发页面确实写得挺快 (但我觉得也就和 iOS 原生开发速度差不多而已, 不过省了一个开发安卓页面的时间不是嘛), 写着到现在业务越来越多, 发现用 RN 的开发成本要比原生要高得多, 把写界面的时候都省下来进行性能优化, 时间都不够, 而且还不一定能优化好.业务越多, 要进行重构的成本也就越大
    3. RN 本身每次发布都会带一些问题, 三方库现在很多也不更新, 感觉不是很友好, 很多库作者弃坑了的感觉
    4. 你们都是 Android 开发, 肯定也还要招 iOS 开发的, 不是说用了 RN 就只跟 js 打交道, 特定平台问题还是很多
    5. Flutter 没在项目中用过, 但是看到 issue 量就有点虚
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.