越来越多公司选择跨平台APP,在简单了解前提下做个对比,现在选择大致有FLutter,RN,Weex,uni-app
选择跨平台我个人考虑的地方有原生交互的方便程度,打包方便程度,框架难度(这个可能相对次要)。
原生交互
按现有业务情况 有些功能跨平台并不可能100%实现,比如第三方登陆 苹果要求一定要加上苹果登陆,比如内购等等。。。
-
uni-app
然后uni-app的如果需要混编,按文档大概意思是将代码封装成原生SDK,在原生中替换webview,在webview 中用JS做交互。。。这个方案听的怎么这么熟悉呢?
uni-app 的调用原生简直就是灾难片,文档意思是将原生对象映射为JS,通过JS调用,前提就是你要同时对JS iOS 安卓 都有一定理解,虽然提供了一定模板,基本上只有安卓的。
Flutter
相对而言比较友好,原生->CHANNE->Dart或者Dart-> CHANNEL->原生 都非常方便
Flutter 的集成方案在GitHub上也很多,除了Flutter环境配置因为有墙的存在比较麻烦,其他都很方便。比如iOS方面想最简单集成只需要生成一个 flutter项目 放在同一级目录下,然后修改podfile,执行 pod基本就可以了,原生代码只需要极少的修改,安卓的迁移也十分简单RN
一个老牌跨平台方案,一直说要重构遥遥无期。
RN传值调用也是非常简单,iOS和安卓 通过一个Module类就可以实现,RN的文章和库应该是最多的,随便搜下就明白了
RN的集成和原生页面跳转也和flutter 区别不大,都是非常容易实现Weex
不熟悉不了解,极少更新,使用的公司少,应该不在大多数人技术选型范围内
打包
- uni-app
如果使用收费插件就只能云打包,云打包如果有支付功能 iOS有一定概率被拒。没有收费插件可以本地打包,但是过程比较繁琐,各种依赖库的添加删除,并且打包体积相较于云打包会明显更大 - Flutter
Flutter内部集成有指令可以直接打包,或者使用idea 打包,基本与原先一样 - RN
iOS稍微比flutter打包麻烦,需要把资源文件打包拖进项目内用Xcode打包。安卓保持原先idea打包方式,或者生成APK后重签
项目结构和选取部分UI部分代码
- uni-app
始终排的不整齐 截图代替
-
Flutter
┌─android android项目目录
├─assets 资源目录
├─build 打包目录
├─iOS iOS项目目录
├─lib 代码存放
├─test 测试文件
└─pubspec.yaml 项目配置文件,比如资源 依赖等等
-
RN
┌─android android项目目录
├─ ios 资源目录
├─ node_modules 基于node文件依赖存放
├─ index.android.js Android入口文件
├─ index.ios.js iOS入口文件
└─ JS 存放JS文件
引用别人的几张对比图
附上几个链接
uni-app
Hello uni-app
hello-uniapp 源码地址-
Flutter
flutter-go 安卓
flutter-go iOS 版本App Store直接搜索
flutter-go 源码地址