1.介绍or畅想

Capacitor是由ionic团队最新开发维护的一个跨平台的应用程序容器,可以轻松构建在iOS,Android,Electron 和 Web 上本机运行的Web应用程序。我们称这些应用为“Native Progressive Web Apps”,而我一般喜欢叫做混合移动开发。

Capacitor是Apache CordovaAdobe PhoneGap的精神继承者,Capacitor将自己描述为“a cross-platform API and code execution layer that makes it easy to call Native SDKs from web code and to write custom Native plugins that your app might need”➡️一个跨平台的API和代码执行层,可以轻松地从Web代码调用Native SDK并编写您的应用可能需要的自定义Native插件。同时在支持它们的平台上访问本机设备功能,适用于iOS上的Swift,Android上的Java和适用于Web的JavaScript的插件API,使开发者可以轻松添加本机功能。

Capacitor同时还具有出色的易于使用的工具,用于管理构建和部署平台。从理念上,它与Weex很相近:Write once,run anywhere,这与cordova 形成鲜明的对比。后者旨在替代(或者说是进化)。Capacitor 对许多现有的cordova plugin具有向后兼容的支持,其意图非常明显。Ionic作为最流行的混合移动框架,在ionic 123版本中都是运行在Cordova之上,但在4版本中,Capacitor已经成为Ionic应用程序的默认选项,你可以继续选择使用cordova或者尝试使用Capacitor。同时Capacitor还提供兼容层,允许在Capacitor项目中使用现有的Cordova插件。Capacitor具有许多功能,下面将介绍。将来很有可能成为Cordova等或者其他解决方案的良好替代品。除了在Ionic应用程序中使用Capacitor之外,还可以在没有Ionic的情况下使用Capacitor与你选择的前端框架或UI库,例如Angular,Vue,React with Material。。。等等等

2.安装+环境配置+项目维护

最基本要求是Node+,以及NPM 5.6.0+,一般情况下下载node包安装后自带安装了npm的了。

ios开发

构建iOS应用程序,首先你要有一台mac电脑,并且安装Xcode 9+,官方表示他们很快将你在windows上也可以用ionic pro为ios构建,我猜应该是ionic提供于云打包的功能吧。

首先你要安装CocoaPods,安装CocoaPods后,需要更新本地的储存库,确保本季具有最新版本的CocoaPods依赖项,所以应该定期运行此命令,更新本机的库版本。

##安装cocoapods
sudo gem install cocoapods
##更新本地的储存库
pod repo update

如果你在更新本地储存库出现以下问题

fatal: 有歧义的参数 'HEAD':未知的版本或路径不存在于工作区中。
使用 '--' 来分隔版本和路径,例如:
'git <命令> [<版本>...] -- [<文件>...]'
Updating spec repo `master`
fatal: 有歧义的参数 'HEAD':未知的版本或路径不存在于工作区中。
使用 '--' 来分隔版本和路径,例如:
'git <命令> [<版本>...] -- [<文件>...]'
fatal: 有歧义的参数 'HEAD':未知的版本或路径不存在于工作区中。
使用 '--' 来分隔版本和路径,例如:
'git <命令> [<版本>...] -- [<文件>...]'
$ /usr/local/bin/git -C /Users/huangenai/.cocoapods/repos/master fetch origin
--progress
remote: Enumerating objects: 127, done.
remote: Counting objects: 100% (127/127), done.
remote: Compressing objects: 100% (91/91), done.
remote: Total 2561792 (delta 55), reused 35 (delta 35), pack-reused 2561665
接收对象中: 100% (2561792/2561792), 585.57 MiB | 2.17 MiB/s, 完成.
处理 delta 中: 100% (1501235/1501235), 完成.
来自 https://github.com/CocoaPods/Specs
* [新分支] backz -> origin/backz
* [新分支] master -> origin/master
* [新分支] predates_sharding_branch -> origin/predates_sharding_branch
* [新分支] swift_version_support -> origin/swift_version_support
* [新标签] v0.32.1 -> v0.32.1
* [新标签] 20161019 -> 20161019
$ /usr/local/bin/git -C /Users/huangenai/.cocoapods/repos/master rev-parse
--abbrev-ref HEAD
fatal: 有歧义的参数 'HEAD':未知的版本或路径不存在于工作区中。
HEAD
使用 '--' 来分隔版本和路径,例如:
'git <命令> [<版本>...] -- [<文件>...]'
[!] CocoaPods was not able to update the `master` repo. If this is an unexpected issue and persists you can inspect it running `pod repo update --verbose`

请将源地址改为国内的镜像地址

ps:网上介绍的都是用淘宝的源,一开始我也是设置淘宝的源,一直报错,Error fetching https://ruby.taobao.org/: bad response Not Found 404

。原因是中国的ruby镜像交由社区来维护了,一开始是重定向到http://gems.ruby-china.org/,后来社区域名改了,所以最终ruby的镜像地址是 这个https://gems.ruby-china.com

//去掉默认更新源
$ gem sources --remove https://rubygems.org/
//使用国内社区维护的源
$ gem sources -a https://gems.ruby-china.com

安装xcode 命令行工具

终端运行下面的命令

如果你出现问题无法通过命令安装 请看这个文章➡️  Xcode 命令行工具 Command Line Tools

xcode-select --install

最新版本的Capacitor始终支持最后两个iOS版本。例如,iOS 11和iOS 10.要支持旧版本的iOS,如果你要支持ios9 可能就要使用旧版本的Capacitor了(如果可用)。

android开发

官方要求必须安装java8 jdk

首先,如果安装了其他版本的JDK ,则必须安装Java 8 JDK,Java 9目前无法运行

Android开发需要安装Android Studio的Android SDK。Android Studio不是必需的,可以仅使用Android CLI工具构建和运行应用程序,官方觉得android studio使构建和运行应用程序变得容易,所以安装吧,毕竟有时候 调试的时候还是要用的。目前支持的API等级21+,即Android 5.0+,所以如果要求支持android 4.4的那Capacitor就不适用了。还需要安装Chrome50+版本的Android WebView。

安装使用 Capacitor(多种选择)

1.将Capacitor添加到现有的前端项目

cd my-app
npm install --save @capacitor/core @capacitor/cli
npx cap init //会要你输入应用程序ID,即android 的程序包名或ios的appid 还要输入项目路径

2.创建一个项目

npx @capacitor/cli create
//会要你输入应用程序ID,即android 的程序包名或ios的appid 还要输入项目路径

3.在ionic中使用Capacitor

//新建项目
//适用于1-4版本
ionic start ionicCapatitor tabs cd ionicCapatitor npm run build //安装capacitor
npm install --save @capacitor/cli @capacitor/core //capacitor与Cordova的Splashscreen插件冲突,所以要删掉。
npm uninstall --save cordova-plugin-splashscreen //Init 应用程序信息
npx cap init [appName] [appId] //添加平台
npx cap add ios
npx cap add android //命令打开对应平台的IDE进行构建 ios 将会打开xcode android 打开android studio 前提是你已经安装了。
npx cap open ios
npx cap open android

当项目代码修改了,要重新构建发布新的版本呢。

//如果在ionic 则 ionic build
npm run build
//复制
npx cap copy //打开对应平台的IDE进行构建
npx cap open [ios or android or order]

项目维护

定期更新依赖

npx cap update

3.使用cordova插件

npm install cool-cordova-plugin //插件名称

npx cap sync //同步

重要提示:

Capacitor不支持Cordova安装变量,不支持自动配置或。所以如果插件需要设置变量,则需要手动添加。

比如说 极光推送 需要添加APP_KEY的,你需要通过编辑要平台的本机项目来配置。这意味着你需要去编辑Info.plistiOS AndroidManifest.xml文件和Android文件

4.使用Capacitor Plugins

Capacitor提供了一个运行时,使开发人员能够使用Web的三大支柱 - HTML,CSS和JavaScript - 来构建在Web上以及主要桌面和移动平台上本机运行的应用程序。但它还提供了一组插件来访问设备的本机功能,例如相机,而无需为每个平台使用特定的低级代码; 该插件为您完成,并为此提供规范化的高级API。Capacitor还提供了一个API,您可以使用该API为Ionic团队提供的官方插件集未涵盖的本机功能构建自定义插件。你可以学习如何在文档中创建插件,还可以在文档中找到有关可用API和核心插件的更多详细信息。

Capacitor APIs: https://capacitor.ionicframework.com/docs/apis/

示例:

home.ts

import { Plugins } from '@capacitor/core';

export class HomePage {
async showDialogAlert() {
await Plugins.Modals.alert({
title: 'Alert',
message: '弹框测试'
});
}
}

home.page

<ion-header>
<ion-toolbar>
<ion-title>Home</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-button (click)="showDialogAlert()" full>Show Alert Box</ion-button>
</ion-content>

效果

5.构建

ios

npx cap add ios
//在ionic中则
ionic capacitor copy ios
npx cap copy
npx cap open ios

自定义原生iOS代码

如果现有的无法满足你的业务需求,没有适合的Capacitor插件。

优秀的你可以使用Swift 或者Objective-C来构建插件,造福人类。

我之前写过cordova的插件,原理都差不多都。

android

npx cap add android
//在ionic中则
ionic capacitor copy android
npx cap copy
npx cap open android

同样你也可以自定义原生的java代码写个插件

比如说你要一个功能调用摄像头,

new 一个 camera.java 继承 Plugin,

camera.java写好调用摄像头的功能,返回结果。

然后在MainActivity中注册插件即可,跟cordova 差不多的。

我初略看了下原理其实都差不多的

详细请看这个https://capacitor.ionicframework.com/docs/plugins/

6.配置

在npx cap init [appName] [appId]的时候会创建一个capacitor.config.json文件,因为我们只输入了 appname跟appid,内容大概如下

{
"appId": "com.xxx.xxx",
"appName": "ionic-angular",
"bundledWebRuntime": false,
"webDir": "www"
}

更多配置上的 请看官网的配置规范。https://capacitor.ionicframework.com/docs/basics/configuring-your-app

7.Capacitor特点

1.开源和免费

它一个开源项目,根据许可的MIT许可证授权,由Ionic和社区维护

2.跨平台

构建在iOS,Android,Electron和Progressive Web Apps上运行良好的Web应用程序。

3.对平台SDK的本机访问

在每个平台上可以访问完整的原生SDK,并轻松地部署到应用程序商店(和网站!)。

4.标准Web和浏览器技术

使用Capacitor构建的应用程序使用标准Web API,因此您的应用程序也将是跨浏览器的,并且将在遵循该标准的所有现代浏览器中良好运行。
5.可扩展
可以通过添加插件来访问底层平台的本机功能,或者,如果找不到符合您需求的插件,则可以通过简单的API创建自定义插件,或使用现有的Cordova插件。

6.简单
专注于你想做什么,而不是如何做。Capacitor将复杂的专有原生API变成简单的JS调用。

8.博主思考

毫无疑问,由ionic tream 开发维护的Capacitor,来势汹汹,意在要替换掉cordova了。Cordova的团队已经付出了巨大的工程努力,允许使用它的开发者在每个支持的平台上管理配置和构建流程,而Capacitor则专注于管理应用程序的Web资产以及它们与目标平台之间的集成,同时保留了实际上,将应用程序构建和打包到平台自己的专用工具链,无疑更甚一筹。cordova你需要花很多的时间去管理Cordova的config.xml文件,在写法上如果你用过cordova可能会编写很多平台检查代码,如下所示:

if(platform.is('cordova')){
cordovaPlugin.doSomething(...)
} else {
web.doSomething(...)
}

在Capacitor中,这种类型的代码将简化为一行

capacitorPlugin.doSomething(...)

Capacitor提供一致的API,而cordova 可能在不同平台使用 api是不一样的。还有可能是因为Cordova对其当前插件的不可靠支持,开发者通常不得不依赖这些第三方开发人员来保持他们的插件是最新的。而且经常这些第三方插件存在着许多bug,需要要花费大量的时间去调试发现bug,和不得不去自己修改插件。ionic trean 自己说了觉得将本机插件和功能的责任推迟到社区已经不够了。如果想提供客户期望的服务水平,以及在移动市场中引领的开发者体验,他们必须承担这一部分的责任。所以他们在设计capacitor的时候,以支持大多数现有的Cordova插件。ionic tream可以说得上是相当了不起了,感觉他们并不是仅仅说开发一套ui组件。希望看到Capacitor在未来发展,以及ionic4正式发布。Capacitor+ionic4 我认为它有可能大大改善混合应用开发体验。随着这项技术的发展,让开发者专注于开发,而不是项目的构建和部署平台。期待····

本文纯属个人观点,如有不妥的,请多多包含。

参考连接

github capacitor

capacttor 官网

https://bendyworks.com/blog/capacitor-elm

https://blog.csdn.net/langyuewu/article/details/79579237

https://www.joshmorony.com/using-cordova-plugins-that-require-install-variables-with-capacitor/

Cordova vs Capacitor(视频)需要fan qiang - 早期体验比较

此随笔乃本人学习工作记录,如有疑问欢迎在下面评论,转载请标明出处。

如果对您有帮助请动动鼠标右下方给我来个赞,您的支持是我最大的动力。

Capacitor 新一代混合应用“神器” 会代替Cordova吗??的更多相关文章

  1. 混合开发 Hybird Ionic Angular Cordova web 跨平台 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. Android 新一代多渠道打包神器

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:李涛 ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1签名和V2签名进行多渠 ...

  3. 【腾讯Bugly干货分享】Android 新一代多渠道打包神器

    关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.lt ...

  4. HTML5应用 + Cordova = 平台相关的混合应用

    Jerry之前的一篇文章 SAP Fiori应用的三种部署方式 曾经提到SAP Fiori应用的三种部署方式: On Premise环境下以ABAP BSP应用作为Fiori应用部署和运行的载体 部署 ...

  5. Android H5混合开发(1):构建Cordova 项目

    Cordova是什么 Apache Cordova是一个开源的移动开发框架.允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 以移动平台为例,安卓.IOS平台设备的常 ...

  6. Cordova CLI源码分析(一)——简介

    本系列文章分析基于node.js的命令行工具Cordova CLI,所以如果对node.js基础不是很了解,建议参考http://nodejs.gamesys.net/node-js提供的基础教程 文 ...

  7. 如何在原生工程中引入Cordova工程-for iOS 【转】

    http://blog.csdn.net/e20914053/article/details/50170487 如今混合开发方兴未艾,有的项目可能一开始是原生开发的,后期需要加入混合开发,如将Cord ...

  8. Atom:优雅迷人的编辑神器

    对于热爱markdown写作的人来说,Atom同样是一款拥有无穷魅力的写作软件.我不怕它无法满足你的需求,就怕你不给一个机会了解它,那么,这将是一场遗憾的错过. 大学的时候,坊间对那些编程高手有一个令 ...

  9. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

随机推荐

  1. client.go

    package)*time.Second) ], {         hasConn := false         waitc := time.After(cfg.DialTimeout)     ...

  2. MFC中打开选择文件夹对话框,并将选中的文件夹地址显示在编辑框中

    一般用于选择你要将文件保存到那个目录下,此程序还包含新建文件夹功能 BROWSEINFO bi; ZeroMemory(&bi, sizeof(BROWSEINFO));  //指定存放文件的 ...

  3. 【bzoj 1095】[ZJOI2007]Hide 捉迷藏

    题目链接: TP 题解: 样例好良心,调样例3h一A…… 细节好多……诸如没完没了的pop和push……搞得头都大了. 同情zzh……调了整一天了. 动态点分治裸题……果然每个“裸题”打起来都跟shi ...

  4. Python数据结构应用5——排序(Sorting)

    在具体算法之前,首先来看一下排序算法衡量的标准: 比较:比较两个数的大小的次数所花费的时间. 交换:当发现某个数不在适当的位置时,将其交换到合适位置花费的时间. 冒泡排序(Bubble Sort) 这 ...

  5. 【爆料】-《堪培拉大学毕业证书》Canberra一模一样原件

    ☞堪培拉大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...

  6. css3新增动画

    1.transiition过渡:样式改变就会执行transition (1)格式:transiition:1s width linear,2s 1s height; (2)参数: transition ...

  7. 自己动手编译Android(LineageOS)源码

    准备 设备:红米3s 设备代号:land Android版本:7.1.1 源码提供:Lineage PC配置: 系统:Ubuntu16.04 x64 至少12G RAM 至少80GB 剩余硬盘空间 良 ...

  8. Boosting(提升方法)之XGBoost

    XGBoost是一个机器学习味道非常浓厚的模型,在数学上非常规范,运用正则化.L2范数.二阶梯度.泰勒公式和分布式计算方法,对GBDT等提升树模型进行优化,不仅能处理更大规模的数据,而且运行效率特别高 ...

  9. 一致性 Hash 算法的实际应用

    前言 记得一年前分享过一篇<一致性 Hash 算法分析>,当时只是分析了这个算法的实现原理.解决了什么问题等. 但没有实际实现一个这样的算法,毕竟要加深印象还得自己撸一遍,于是本次就当前的 ...

  10. SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...