跳到主要内容
版本:v8

从 Capacitor 5 更新到 Capacitor 6

Capacitor 5 和 6 之间的破坏性更改设计得非常少。在本指南中,您将找到将项目更新到当前 Capacitor 6 版本的步骤,以及我们官方插件的破坏性更改列表。

NodeJS 18+

Node 16 已于 2023 年 9 月 11 日达到生命周期结束。Capacitor 6 需要 NodeJS 18 或更高版本。(建议使用最新的 LTS 版本。)

使用 CLI 迁移

将 Capacitor CLI 的 latest-6 版本安装到您的项目中:

npm i -D @capacitor/cli@latest-6

安装完成后,只需运行以下命令即可让 CLI 为您处理迁移。

npx cap migrate

如果迁移的任何步骤无法完成,终端输出中会提供其他信息。手动迁移的步骤在下面列出。

使用 VS Code 扩展迁移

如果您安装了 VS Code 扩展,只需查看扩展的推荐部分,即可找到将项目迁移到 Capacitor 6 的选项。

iOS

以下指南介绍了如何将 Capacitor 5 iOS 项目升级到 Capacitor 6。

升级 Xcode

Capacitor 6 需要 Xcode 15.0+。

SPM 支持

从使用 Cocoapods 转换到 SPM 是一个相当大的话题,我们将在即将到来的另一篇文章中介绍。

注册自定义插件

在 Capacitor 6 中,插件类不再自动注册。对于通过 npm 安装的插件,CLI 将生成一个插件类列表以编程方式注册它们。 但是对于遵循自定义代码指南创建不通过 npm 分发的本地插件的用户,他们将必须创建自定义视图控制器并注册其插件

缩放

为了匹配 Android 行为,iOS 应用默认情况下不再可缩放。要启用缩放,请检查 zoomEnabled 配置选项

Android

以下指南介绍了如何将 Capacitor 5 Android 项目升级到 Capacitor 6。

升级 Android Studio

Capacitor 6 需要 Android Studio Hedgehog | 2023.1.1 或更新版本,因为它使用了 Gradle 8.2。

更新完成后,Android Studio 可以帮助您处理一些与 gradle 相关的更新以及将包移动到构建文件中。要开始,请运行 Tools -> AGP Upgrade Assistant

APG Upgrade Assistant

更新 Android 项目变量

在您的 variables.gradle 文件中,将值更新为以下新的最小值

minSdkVersion = 22
compileSdkVersion = 34
targetSdkVersion = 34
androidxActivityVersion = '1.8.0'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.12.0'
androidxFragmentVersion = '1.6.2'
coreSplashScreenVersion = '1.0.1'
androidxWebkitVersion = '1.9.0'
junitVersion = '4.13.2'
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '10.1.1'

更新 google services 插件

# build.gradle

dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
- classpath 'com.google.gms:google-services:4.3.15'
+ classpath 'com.google.gms:google-services:4.4.0'

更新 gradle 插件到 8.2.1

# build.gradle

dependencies {
- classpath 'com.android.tools.build:gradle:8.0.0'
+ classpath 'com.android.tools.build:gradle:8.2.1'

更新 gradle wrapper 到 8.2.1

# gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
- distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

更新 androidScheme

在 Capacitor 6 中,对于 现有应用httpsandroidScheme 的默认设置,以便更好地使 Capacitor 应用能够利用系统 自动填充功能

更改 scheme 相当于在不同的域上发布您的应用,这意味着存储在 cookies、localstorage 等中的任何数据将不再可访问。为了避免因此更改而导致的数据丢失,如果您还没有在 Capacitor 配置文件中设置 androidScheme 条目为 https,您应该将 scheme 设置为 http

{
server: {
androidScheme: "http"
}
}

如果您已经有设置为 httpsandroidScheme 条目,您现在可以安全地删除它。

更新 kotlin 版本

如果您的项目使用 kotlin,请将 kotlin_version 变量更新到 '1.9.10'

Plugins

以下插件功能已被修改或删除。相应地更新您的代码。

对于所有具有监听器的插件,addListener 现在仅返回一个 Promise,如果您在不使用 await 的情况下将调用结果存储在变量中,您的代码将不再编译。

Action Sheet

  • androidxMaterialVersion 变量已更新到 1.10.0

Camera

  • Capacitor Camera 插件的版本 6 现在使用 Photo Picker API,除非使用 saveToGallery: true,否则不再需要声明相机权限。如果此设置为 false,并且没有其他插件需要以下权限,您可以从 AndroidManifest.xml 中删除它们。
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 在 Android 上,如果用户取消从图库中选择图像,则返回的错误现在为 "User cancelled photos app",与其他平台一样。
  • androidxMaterialVersion 变量已更新到 1.10.0

Filesystem

  • iOS 现在将 ctimemtime 作为数字而不是字符串返回,就像所有其他平台一样。

Geolocation

  • NSLocationAlwaysUsageDescriptionPrivacy - Location Always Usage Description)已弃用,可以从 Info.plist 中删除。
  • playServicesLocationVersion 变量已更新到 21.1.0

Google Maps

  • iOS 原生库已更新,查看此处了解更多详细信息
  • NSLocationAlwaysUsageDescriptionPrivacy - Location Always Usage Description)已弃用,可以从 Info.plist 中删除。
  • googleMapsPlayServicesVersion 已更新到 18.2.0
  • googleMapsUtilsVersion 已更新到 3.8.2
  • googleMapsKtxVersion 已更新到 5.0.0
  • googleMapsUtilsKtxVersion 已更新到 5.0.0
  • kotlinxCoroutinesVersion 已更新到 1.7.3
  • androidxCoreKTXVersion 已更新到 1.12.0
  • kotlin_version 已更新到 1.9.10

Local Notifications

  • 在 Android 14 上,即使使用 <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> 权限,通知默认也不精确,查看此处了解更多详细信息

Push Notifications

  • firebaseMessagingVersion 变量已更新到 23.3.1

Share

  • androidxCoreVersion 变量已更新到 1.12.0

Splash Screen

  • coreSplashScreenVersion 变量已更新到 1.0.1

Status Bar

  • androidxCoreVersion 变量已更新到 1.12.0