跳到主要内容
版本:v7

从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升级助手

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地图插件

  • 多个相关版本变量更新:
    • googleMapsPlayServicesVersion18.1.0
    • googleMapsUtilsVersion3.4.0
    • googleMapsKtxVersion3.4.0
    • googleMapsUtilsKtxVersion3.4.0
    • kotlinxCoroutinesVersion1.6.4
    • androidxCoreKTXVersion1.10.0
    • kotlin_version1.8.20

本地通知插件

  • Android 13需要新的运行时权限检查才能调度本地通知。当目标SDK为33时,必须相应调用checkPermissions()requestPermissions()

推送通知插件

  • Android 13需要新的运行时权限检查才能接收推送通知。当目标SDK为33时,必须相应调用checkPermissions()requestPermissions()
  • firebaseMessagingVersion变量已更新至23.1.2

状态栏插件

  • 在iOS上,默认的状态栏动画效果已改为FADE