2021-06-30 初稿

0 按
看 vue3 - 移动端文档 https://v3.cn.vuejs.org/guide/mobile.html 时候,提到了一个混合开发的解决方案:
- Capacitor + Vue.js Guide
今天简单体验了一下,因为没有移动端开发经验,没有系统看到相关概念,最终还是跑了起来。毕竟移动端应用是一个专门的岗位和领域,这里做个浅尝辄止的体验。
1 核心概念
首先是几个关键词:
Capacitor,感觉是移动端里的uni-app(一套语法在不同执行环境里兼容运行),提供的是一套桥阶层,做桥阶层有很多产品,但这个看起来口碑还可以。当然也有很多类似的产品。Ionic Framework,一套UI框架,感觉是移动端里的NutUI,vant。只不过更贴近手机风格,我以为它封装了很多跨端的东西,看下来也没啥,平常心看待。vue3,也就是 vue3 的web项目。
Capacitor 这是一个基础工具包、壳、桥阶层。这个东西做了一层转换,就跟 uni-app 似的,封装不同平台(android/ios) 的基础代码(补充:还支持 electron)。
这次能同时兼容多种框架,从技术上来看是把普通的js页面作为 web component 来操作。理论上它支持svelte/prettie-vue 是完全可能的。
Ionnic 背后的团队做了 ionic 这个东西,也产出了 capacitor ,所以很多时候两者会同时出现,但不是强制绑定的。
2 流程
大致的操作流程:
- 利用 vue3 书写web代码,是否利用
ionnic无所谓,是否真的调用原生功能比如摄像头拍照也无所谓 - 打包vue代码,生成
/dist文件夹 - 安装
npm i @capacitor/core @capacitor/cli,然后执行npx cap init,最后会生成capacitor.config.ts文件(和其他内容),里面有webDir里设定路径
{"appId": "cc.ijust.demo","appName": "vue3-app","bundledWebRuntime": false,"webDir": "dist","plugins": {"SplashScreen": {"launchShowDuration": 0}}}
下一步就是选择平台 android还是 ios,我准备好了 android 平台的准备。如果你不熟悉 android 相关配置,可以看我的一篇文章。
- 引入功能
npm i @capacitor/android,然后执行npx cap add android,最终项目根目录生成了android/文件夹 - 执行
npx cap open android,会自动打开Android Studio。会精力漫长的依赖安装?最终风扇不转了。 - 点击
run,用模拟器打开可以运行。选择 打包 - apk ,产出 apk 文件 - 这个apk交给安卓手机,可以安装运行
https://capacitorjs.com/docs/android
3 如何调用原生功能
这才是真正要学习的东西,背api,有很多原生功能,比如gps、拍照等。
看 capacitor 官网提到了一个demo:https://capacitorjs.com/solution/vue
可以简单看如何调用原生功能:
// 这是 vue 里的一段逻辑import { defineComponent, ref } from 'vue';// 下一行引入了封装好的跨平台api,获取地理信息import { Geolocation } from '@capacitor/geolocation';export default defineComponent({setup() {const loc = ref<{lat: null | number;long: null | number;}>({lat: null,long: null,});// 用户点击按钮触发这个方法const getCurrentPosition = async () => {// 直接执行封装好的api得到结果const pos = await Geolocation.getCurrentPosition();loc.value = {lat: pos.coords.latitude,long: pos.coords.longitude,};};return { getCurrentPosition, loc };},});
核心流程:
- 引入
capacitor封装好的跨端方法 - 调用方法得到结果
当然也可以调用 android/ios 开发好的原生代码
4 总结
可以看到 capacitor 是一个具体技术栈无关的技术,无所谓你用 react还是 vue2 vue3,也无所谓使用 ionic 或者其他 UI框架。他的作用是提供基础服务,这进一步印证了,可以把这个东西想象成 uni-app 或者 taro ,让开发只关注开发,其他的都做封装,调用api封装、打包封装等。
再看这个新闻稿
Ionic 团队发布了一项名叫 Capacitor 且继承了 Apache Cordova 和 Adobe PhoneGap 核心思想的开源项目。 Capacitor 允许你使用现代 web 技术来构建可在任意平台中运行的应用,从 web 浏览器到移动设备(Android 和 iOS),甚至是通过 Electron(Github 上比较流行的使用 Node.js 和前端 web 技术构建跨平台桌面应用的技术)构建的桌面应用平台。
因此最近也有新闻说 quasar 什么的也出新版支持跨端,本质也是 quasar (UI)+ capacitor (基建)
-1 相关链接
[译] 使用Capacitor 和 Vue.js 构建移动应用 https://zhuanlan.zhihu.com/p/52074898
Ionic & Vue.js - Full Tutorial (Build a Complete App)
