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)