V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FreshOldMan
V2EX  ›  程序员

公司 App 项目基本都是 ReactNative 写的,极少原生,大家的觉得这样合适吗?

  •  
  •   FreshOldMan · 2018-04-24 14:45:09 +08:00 · 29432 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    68 条回复    2019-08-19 09:57:16 +08:00
    chmlai
        1
    chmlai  
       2018-04-24 14:49:03 +08:00
    合适
    Akkariin
        2
    Akkariin  
       2018-04-24 14:52:26 +08:00
    看你是什么样的公司了,公司自己用的那种没问题。
    murmur
        3
    murmur  
       2018-04-24 14:56:42 +08:00
    等做大了早晚要改 native 层的
    至少加固什么必须的得做
    janxin
        4
    janxin  
       2018-04-24 14:57:24 +08:00
    看需求看用户群体,对于开发产品而言 RN 对于快速发布和更新还是帮助很大的。

    作为用户,反正我尽量不用 RN 的应用...
    huiyifyj
        5
    huiyifyj  
       2018-04-24 14:57:58 +08:00 via Android
    小公司很常见,大公司基本是原生好点
    zhchyu999
        6
    zhchyu999  
       2018-04-24 15:07:20 +08:00
    大公司也会有迅速相应业务的需求,也得时刻都有上线的能力。之前是插件化,现在折腾 RN,至于用户体验,谁管呢,绩效拿到,老板用的都是最新款手机,不卡就行
    game3108
        7
    game3108  
       2018-04-24 15:22:07 +08:00
    RN 的好处是热更新,不用发版本,app 体积小。
    坏处就是接入较为麻烦,任何横向的扩展都会生不如死。(例如全面的打点需求)
    3a3Mp112
        8
    3a3Mp112  
       2018-04-24 15:23:47 +08:00
    @game3108 RN 和热更新有关系吗?
    lsyAndroid
        9
    lsyAndroid  
       2018-04-24 15:24:41 +08:00 via Android
    只要你们有人能 hold 住就行
    beginor
        10
    beginor  
       2018-04-24 15:42:54 +08:00 via Android
    合适!

    对于老板来水,可以少几个 native 开发,省钱,用什么技术不重要!

    对于客户来说,只要不卡,谁管你用什么技术实现!
    icris
        11
    icris  
       2018-04-24 15:57:48 +08:00
    ReactNative 是 Native,问题不成立
    murmur
        12
    murmur  
       2018-04-24 15:59:25 +08:00
    @icris 按你这么说 cordova 有 native 层只不过整个 app 都跑在 webview 里
    icris
        13
    icris  
       2018-04-24 16:02:48 +08:00
    @murmur #12 ReactNative 大部分情况下不跑在 webView 里
    lightening
        14
    lightening  
       2018-04-24 16:09:34 +08:00
    ReactNative 做出来是是 OS 的 Native UI Elements 啊,不是跑在 WebView 里的。

    就算是用 webview,也看你公司 app 的用途。如果是简单的信息类 app 而且 app 不是公司的主要产品,我觉得也没什么问题。
    murmur
        15
    murmur  
       2018-04-24 16:12:49 +08:00   ❤️ 1
    我来说几点我的看法:
    对于小公司、圈钱就跑的公司或者企业应用规模不大时我认为可以,但是因为 rn 的渲染也是 native 层,比起 cordova 纯 webview+bridge 的解决方案,显然后者更好解决,因为如果是 wkwebview 或者 uiwebview 的 bug,受影响的是成千上万的 wap 网站和 app 内置页面,内测的时候把苹果辱骂一番你看他出不出解决方案,但是如果是 rn 层某个组件的 bug,等解决方案或者自己解决的难度是明显高于 cordova 的

    另外做大时候整个 app 都是要加固的,bundle 或者 webview 里的东西的混淆视作不加密,基本是送给别人的,那你的核心逻辑、加密、协议这些要往 c 层转移,到头来还是需要优秀的 native 程序员来搞定

    你记住一点 react native 不因为他是 native 坑就比其他的框架或者方案要少
    大厂的东西长的像 cordova 或者长的像 react native,但是你不知道他的 native 层魔改了什么东西,就包括 pc 端长的像 electron 的应用是一样的
    stabc
        16
    stabc  
       2018-04-24 16:50:23 +08:00   ❤️ 1
    @murmur 你把 RN 和 Cordova 的 Native 当一回事做类比证明你一点常识都没有。像你现在这样凭空臆想出一堆理由做总结,还用“你记住一点”这么荒诞的词汇,对于新人是极大的误导,对技术社区也是一种危害。 建议你先用 RN 和 Cordova 开发一段时间,熟悉各自的坑和优劣都在哪里,再来就事论事发表相关言论,那才是对别人有帮助的事情。
    murmur
        17
    murmur  
       2018-04-24 16:51:43 +08:00
    @stabc 那只是嘲讽某些人自以为用了 react native 就敢说自己是 native 开发了
    不要当真
    liuzhedash
        18
    liuzhedash  
       2018-04-24 16:53:17 +08:00
    合适,React Native 的开发效率高,效率高才有可能活下来。做大了再招人扩 native 侧功能,或者直接 native 重写都行。
    murmur
        19
    murmur  
       2018-04-24 16:53:26 +08:00
    @stabc cordova 我用了快 2 年了 react native 一年还是两年前用过就弃坑了 一是他当时的 native 库远被 cordova 成倍数碾压 而是他的 webview 当时实在太弱了 连最基本的回调和钩子没有 而 webview 才是整个项目中最大的复用点,我们有很多地方都是直接提供页面在 app 里显示,没法给你转写 rn
    liuzhedash
        20
    liuzhedash  
       2018-04-24 16:59:49 +08:00
    @murmur #15
    举个极端的例子,如果用户坚持不更新 ios,那么当前版本的 webview 问题没任何办法解决; ReactNative 的某个组件实现有 bug,可以单独抽出来解决。
    加固确实无解。
    murmur
        21
    murmur  
       2018-04-24 17:02:26 +08:00   ❤️ 2
    顺便跟楼主说一下
    某些人认为我说的彩笔
    但是根据我的经验,越是彩笔分享经验你越要记笔记,我这种彩笔说什么东西坑那对于经验没多少的新人基本都会踩到
    反倒是牛人,他们因为经验丰富,精通各种语言开发,可能遇到什么问题就顺手解决了一下,结果最后的结局就是这个框架没什么问题,好的一批

    这里不花过多篇幅讨论 cordova 和 rn 的优劣,但是你要知道插件和生态环境也是选型的重要因素,比如同样的 nfc 支持
    https://github.com/chariotsolutions/phonegap-nfc
    别人的项目和文档

    ui 库
    https://vux.li/

    相比 rn 那种动不动就 要 ios 和 android 差异化设计的也敢叫 ui 库
    stabc
        22
    stabc  
       2018-04-24 17:07:24 +08:00
    @murmur
    >那只是嘲讽某些人自以为用了 react native 就敢说自己是 native 开发了,不要当真
    事实是你确实说了没有常识的话。

    如果有一种产品叫“ VueNative ”,你劝人放弃 RN 还可以理解。但是你现在劝别人放弃 RN 去用 Cordova,那你是不是要把各自优劣都摆出来呢?库多库少这种只有在同类产品上对比才有意义,说到现在你其实还是看不到 RN 和 Cordova 的实质区别,所以你说你用 RN 走过“快 2 年”,我是不相信的。
    icris
        23
    icris  
       2018-04-24 17:07:37 +08:00
    @murmur #17
    不知道是不是说我,我先提一点,我是用 kotlin 写 android 的。
    然后,`With React Native, you don't build a"mobile web app", an"HTML5 app", or a"hybrid app". You build a real mobile app that's indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.` 你大可直接批判 Facebook,嘲讽用户算什么事儿。
    然后,所有 react native 做不了的或者看起来 react native 做不了的东西的通用解,`Use native code when you need to`.

    然后我现在没怎么看懂,你是支持 native 的还是支持 web 的?
    murmur
        24
    murmur  
       2018-04-24 17:08:22 +08:00
    @icris native+web
    WildCat
        25
    WildCat  
       2018-04-24 17:09:20 +08:00
    什么公司,我想试试你们 app 体验
    SourceMan
        26
    SourceMan  
       2018-04-24 17:11:24 +08:00
    RN build 出来就是原生组件和代码呀~
    没毛病
    stabc
        27
    stabc  
       2018-04-24 17:12:30 +08:00
    @murmur 顺便说一下,我个人也是更喜欢 Cordova 的,但是是纯个人喜好,并不推荐别人也用。我只是希望你说话多一些基本常识和逻辑。
    murmur
        28
    murmur  
       2018-04-24 17:13:13 +08:00
    @stabc react native 相比于 cordova 最大的优势是所有元素可以全用 native 渲染,在手势、动画、性能以及(内存占用?)上会有很大优势

    但是现在已经是 2018 年,安卓 4.4 普及以及 ios9 的普及让 webview 有了很大的性能提升,即便不用 crosswalk 也能有不错的体验
    而且在 cordova 下,因为是真的 js 和 dom 环境,所以一切你在 wap 下能用的东西都可以用,单独的页面去掉 native 部分还可以做成 wap 版给不愿意下载 app 的用户看一下

    我不是来宣教 cordova 的,我只是顺手提到这个东西然后不小心水了一下而已,什么场景用什么技术,我们有很多过分的需求 rn 就是做不到
    palxie
        29
    palxie  
       2018-04-24 17:14:40 +08:00
    合适
    stabc
        30
    stabc  
       2018-04-24 17:28:24 +08:00
    @murmur
    >react native 相比于 cordova 最大的优势是所有元素可以全用 native 渲染,在手势、动画、性能以及(内存占用?)上会有很大优势

    我不知道这段话是你的切身体会还是刚刚百度学习的。但是我只注意到四个字:“很大优势”。那么能不能给大家解释一下,在 Cordova “也有不错体验”的前提下,RN 的这个“很大优势”,你在调试过程中实际的体验是如何的?以及为什么可以放弃这种体验。
    Mikewu
        31
    Mikewu  
       2018-04-24 17:29:27 +08:00
    表示 RN 没什么不合适的,至于用不用原生封装就看需求了,有需求的话做游戏、直播之类的也没问题的。
    icris
        32
    icris  
       2018-04-24 17:35:22 +08:00
    @murmur #24
    总结一下,react native 是 native,问题不成立,就算退一步算是 web 技术,你也不反对,意见一致了不?
    加固这东西吧……正好今天看见一个帖子 https://www.v2ex.com/t/449256 . 也不能说没用,但我个人是感觉用处有限。实在不行编译个 aosp 跑起来不是要什么有什么。
    xieren58
        33
    xieren58  
       2018-04-24 18:16:57 +08:00
    flutter 都出来了. react native 和 cordova 都要凉.
    XinLake
        34
    XinLake  
       2018-04-24 22:05:11 +08:00
    加固 是什么操作,是什么样的技术处理,我经常看到互联网的 APP “加固” 服务,但是不知道是什么样的一种技术操作,谁能专业的解释一下?
    feiyuGood
        35
    feiyuGood  
       2018-04-25 00:27:34 +08:00
    防止别人脱壳吧,核心代码写在 so 文件里面! 公司初期使用 webview mui 方式开发 在使用 原生方式 ,后来用了 react native 方式 和 weex 组件方式开发
    tyrealgray
        36
    tyrealgray  
       2018-04-25 00:48:11 +08:00 via Android   ❤️ 1
    别的不说,这年头还头铁用 webview 框架的公司是真的勇士。
    RN 是社区和解决方案决定了它用起来就很快,至于坑,目前还没遇到跨不过去的。
    还有就是一定要多升级 RN 的版本,不管有多麻烦,提升是很明显的
    HuangLibo
        37
    HuangLibo  
       2018-04-25 01:26:05 +08:00
    省经费可以这么干, 有钱的公司同一个项目有原生, RN, web, 多个版本.
    Pastsong
        38
    Pastsong  
       2018-04-25 01:40:30 +08:00 via Android
    客户端应用有不能被反编译的语言吗...反正都是混淆,用 JS 有啥区别
    rqzheng2008
        39
    rqzheng2008  
       2018-04-25 01:42:04 +08:00 via Android
    用整套 webview 框架还不如去搞小程序,真的。
    vizards
        40
    vizards  
       2018-04-25 01:45:42 +08:00 via iPhone
    RN 发展到现在还有人把它和 webview、热更新绑架在一起,对技术都带有偏见挺可悲的
    orangeade
        41
    orangeade  
       2018-04-25 01:52:56 +08:00 via Android
    @murmur 看到大厂 electron,我就想起虾米穷逼 VIP
    xupefei
        42
    xupefei  
       2018-04-25 02:11:36 +08:00
    @Pastsong #38 程度是不一样的。JS 玩出花还是混淆,再混淆还是 JS。看不懂也可以,至少可以找到输入输出黑盒试一试。
    现在有个 C++放出来给你反编译,你面对编译器优化出的海量汇编代码,能深入到哪一步?再来个加了 VM 壳的 C++程序,想看到汇编都得折腾到半死。
    randyzhao
        43
    randyzhao  
       2018-04-25 02:41:22 +08:00
    能赚到钱就合适

    赚到了钱,想怎么弄怎么弄
    kimown
        44
    kimown  
       2018-04-25 06:01:06 +08:00 via Android
    jsc 已经支持 wasm 了,等 rn 内置 jsc 升级后,你需要的关键加密内容,完全可以用 c 写,然后 transform 到 wasm,不会出现泄密情况
    fumer
        45
    fumer  
       2018-04-25 08:10:47 +08:00 via iPhone
    @murmur 难道 rn 的 app 不能加固吗
    fumer
        46
    fumer  
       2018-04-25 08:14:59 +08:00 via iPhone
    @liuzhedash 为什么说加固无解
    maemual
        47
    maemual  
       2018-04-25 08:53:04 +08:00 via iPhone
    什么业务需求,上下文,公司背景,什么都不知道,在这怎么讨论合不合适,瞎扯淡
    liuzhedash
        48
    liuzhedash  
       2018-04-25 08:58:40 +08:00
    @fumer #46
    现在主流 App 加固方法都是针对 Native 层的,一个 React Native 应用的主要功能在 js bundle 里面放着,所以真要加固需要参考 44 楼提到的这些
    hugebug
        49
    hugebug  
       2018-04-25 09:08:51 +08:00
    flutter 安利一下 哈哈 @xieren58
    kuxuan
        50
    kuxuan  
       2018-04-25 09:33:32 +08:00
    Facebook 自己都用 React Native 有什么问题?
    kuxuan
        51
    kuxuan  
       2018-04-25 09:35:17 +08:00
    这么多大佬都用 RN 别人也没什么问题啊。
    https://facebook.github.io/react-native/showcase.html
    xiangyuecn
        52
    xiangyuecn  
       2018-04-25 09:46:27 +08:00
    React Native 作用之一不是为了解决跨平台的问题吗?

    设计的同一个原型界面,IOS、Android、XXX 平台都重复写一遍多没意思,React Native、Hybrid App 你值得拥有。

    我猜微信小程序就是一个破网页,底层还是 webview
    ii4Rookie
        53
    ii4Rookie  
       2018-04-25 10:04:53 +08:00
    看各位大佬讨论 有点收货
    projectzoo
        54
    projectzoo  
       2018-04-25 12:53:42 +08:00
    flutter 安利一个。

    楼主这个问题我觉得是这样的:
    对公司 <---- 很合适
    对个人 <---- 不是很合适
    Dawnki
        55
    Dawnki  
       2018-04-25 12:56:56 +08:00 via iPhone
    从头看到尾,学到很多.但是作为一个不搞客户端的人来说,谁可以通俗易懂地告诉我加固是什么?跪谢 23333
    murmur
        56
    murmur  
       2018-04-25 13:00:48 +08:00
    @xiangyuecn 小程序好像还真是山寨版 rn
    fumer
        57
    fumer  
       2018-04-25 13:07:01 +08:00 via iPhone
    @liuzhedash 加固一般采用第三方服务不就是把生成的 apk 交给第三方加固生成一个新的 apk 给你吗,和是否是采用 rn 有什么关系呢
    iFlicker
        58
    iFlicker  
       2018-04-25 13:36:28 +08:00
    flutter 要是不用 dart 我会爱上它的。。。
    fyooo
        59
    fyooo  
       2018-04-25 14:09:08 +08:00
    羡慕
    ZSeptember
        60
    ZSeptember  
       2018-04-25 16:07:25 +08:00
    我们公司很多业务直接用 WebView。
    lvsemi1
        61
    lvsemi1  
       2018-04-25 16:20:31 +08:00 via Android
    @fumer 当然可以,但是交了钱加了等于没加
    lvsemi1
        62
    lvsemi1  
       2018-04-25 16:26:58 +08:00 via Android
    @fumer 反过来,如果像 44l 那样,那也没必要加固了。对于牛逼到能分析 webassembly 字节码的人来说,什么加固都是假的
    changwei
        63
    changwei  
       2018-04-25 16:35:27 +08:00
    怎么木有人提到 Weex 呢?想问问这个怎么样啊?有木有什么成熟的 app 是用它开发的?
    fumer
        64
    fumer  
       2018-04-25 19:15:01 +08:00 via iPhone
    @lvsemi1 所以加固能阻挡住大部分的人流就可以了。一般的也没有大成本来搞这个吧
    lvsemi1
        65
    lvsemi1  
       2018-04-25 19:45:19 +08:00 via Android
    @fumer 你不能这么理解,加固本来就是小众需求,当你需要加固来保护你的程序的时候,你自然期望是要有效果的,不然就是掩耳盗铃了
    39499740
        66
    39499740  
       2018-05-11 09:46:04 +08:00
    @iFlicker 开始感觉火箭挺恶心,但是看到了 idea 的优化,感觉也不是那么难以使用了,}的地方都有提示,比以前写别的要舒服很多
    x58
        67
    x58  
       2019-05-26 09:14:49 +08:00
    @feiyuGood 请问你知道怎么在 rn 中引用.so 库么,没学过 android 和 java 虽然把官网的 demo 实现了,但老板给了我一个 so 库让我在 app 中调用,三天过去还是一点头绪没有,能帮个忙么 QAQ
    yurnery
        68
    yurnery  
       2019-08-19 09:57:16 +08:00
    RN 坑很多, 如果主要是以展示为主的应用用 RN 还是很快的, 虽然我觉得原生写也很快, 但是用 RN 公司可以省一个人.
    坑:
    1. 很多三方库更新时间都是 2,3 年前了, 包括 star 比较多的项目
    2. 三方库的水平参差不齐, 要有自己 fork 三方库更改的能力
    3. 涉及到一些交互优化的地方, RN 很难搞定, 例如安卓上的缩放, iOS 和安卓上的列表嵌套滑动, 整个社区现在都没一个实现, 需要自己通过手势监听, 绝对布局等来实现
    4. Flatlist 在长列表上还是有性能问题, 有时候点击列表没执行 onPress 回调等

    这些问题可能 Flutter 也会有, 只是说扩平台的坑会比原生多很多, 如果要做大做优, 后面还是得用原生
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 02:14 · PVG 10:14 · LAX 18:14 · JFK 21:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.