从Capacitor 4升级到Capacitor 5
相比之前的版本升级,Capacitor 4到5的破坏性变更非常少。本指南将提供升级至Capacitor 5的步骤说明,同时列出官方插件的破坏性变更清单。
NodeJS 16+要求
Node 12已终止支持,Node 14也将在2023年4月30日终止支持。Capacitor 5需要NodeJS 16或更高版本(推荐使用最新的LTS版本)。
使用CLI进行迁移
在项目中安装Capacitor CLI的latest-5
版本:
npm i -D @capacitor/cli@latest-5
安装完成后,只需运行以下命令让CLI自动完成迁移:
npx cap migrate
如果迁移过程中有任何步骤无法自动完成,终端输出中会提供额外信息。下方也列出了手动迁移的具体步骤。
使用VS Code扩展进行迁移
如果已安装VS Code扩展,只需查看扩展的推荐部分,就能找到将项目迁移至Capacitor 5的选项。
iOS平台升级
以下指南描述如何将Capacitor 4的iOS项目升级到Capacitor 5。
升级Xcode
Capacitor 5需要Xcode 14.1及以上版本。
更新.gitignore文件
修改.gitignore
文件如下:
- App/Podfile.lock
+ App/output
使用单一尺寸应用图标
Xcode 14支持1024x1024的单一应用图标,因此可以清理AppIcon.appiconset中所有不必要的尺寸。
Android平台升级
以下指南描述如何将Capacitor 4的Android项目升级到Capacitor 5。
升级Android Studio
由于使用了需要Java JDK 17的Gradle 8,Capacitor 5要求Android Studio Flamingo | 2022.2.1或更新版本。Android Studio Flamingo已自带Java 17,无需额外下载!
更新后,Android Studio可协助完成与gradle相关的更新和build文件中的包迁移。首先运行工具 -> AGP升级助手
。
更新Android项目变量
在variables.gradle
文件中更新以下最低要求值:
minSdkVersion = 22
compileSdkVersion = 33
targetSdkVersion = 33
androidxActivityVersion = '1.7.0'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.10.0'
androidxFragmentVersion = '1.5.6'
coreSplashScreenVersion = '1.0.0'
androidxWebkitVersion = '1.6.1'
junitVersion = '4.13.2'
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '10.1.1'
更新Google服务
# build.gradle
dependencies {
- classpath 'com.google.gms:google-services:4.3.13'
+ classpath 'com.google.gms:google-services:4.3.15'
更新gradle插件至8.0.0
# build.gradle
dependencies {
- classpath 'com.android.tools.build:gradle:7.2.1'
+ classpath 'com.android.tools.build:gradle:8.0.0'
更新gradle wrapper至8.0.2
# gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
- distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
禁用Jetifier
如果没有任何插件仍在使用旧的android支持库而非对应的AndroidX库,请移除这行配置。
# gradle.properties
android.useAndroidX=true
- android.enableJetifier=true
将包声明移至build.gradle
# AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="[YOUR_PACKAGE_ID]">
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
# build.gradle
android {
+ namespace "[YOUR_PACKAGE_ID]"
compileSdkVersion rootProject.ext.compileSdkVersion
更新androidScheme
为更好地支持自动填充凭证功能,Capacitor 6将把https
设为__现有应用__的androidScheme
默认值。
更改scheme等同于将应用部署到不同域名,会导致cookie、localstorage等存储的数据无法访问。为避免因此造成数据丢失,应在Capacitor配置文件中立即将scheme设为http
(即使当前这是默认值)。
{
server: {
androidScheme: "http"
}
}
更新kotlin版本
如果项目使用kotlin,请将kotlin_version
变量更新为'1.8.20'
。
插件变更
以下插件功能已修改或移除,请相应更新代码。
操作表插件
androidxMaterialVersion
变量已更新至1.8.0
浏览器插件
androidxBrowserVersion
变量已更新至1.5.0
相机插件
- Android 13需要在
AndroidManifest.xml
中声明读取媒体图片权限(<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
) androidxMaterialVersion
变量已更新至1.8.0
androidxExifInterfaceVersion
变量已更新至1.3.6
设备插件
DeviceId.uuid
更名为DeviceId.identifier
- 在iOS 16+上,
DeviceInfo.name
将返回通用设备名称,除非添加相应的权限配置
地理位置插件
playServicesLocationVersion
已更新至21.0.1
Google地图插件
- 多个相关版本变量更新:
googleMapsPlayServicesVersion
→18.1.0
googleMapsUtilsVersion
→3.4.0
googleMapsKtxVersion
→3.4.0
googleMapsUtilsKtxVersion
→3.4.0
kotlinxCoroutinesVersion
→1.6.4
androidxCoreKTXVersion
→1.10.0
kotlin_version
→1.8.20
本地通知插件
- Android 13需要新的运行时权限检查才能调度本地通知。当目标SDK为33时,必须相应调用
checkPermissions()
和requestPermissions()
推送通知插件
- Android 13需要新的运行时权限检查才能接收推送通知。当目标SDK为33时,必须相应调用
checkPermissions()
和requestPermissions()
firebaseMessagingVersion
变量已更新至23.1.2
状态栏插件
- 在iOS上,默认的状态栏动画效果已改为
FADE