跳到主要内容
版本:v5

代码中的重大变更

iOS

CAPBridgedPlugin 协议变更

  • CAPBridgedPlugin 协议的要求已从类级别移至实例级别。
  • pluginId 重命名为 identifier,以避免与 CAPPlugin.pluginId 冲突,同时 getMethod(_:) 要求已被完全移除并放入内部扩展方法中。
  • pluginMethods 也进行了更新,使其内容更明确(原为 Any,现为 CAPPluginMethod)。

绝大多数用户不应遇到任何问题,因为目前的惯例是使用宏来生成对 CAPBridgedPlugin 的符合性。任何将类型转换为 CAPBridgedPlugin 或手动实现 CAPBridgedPlugin 但未使用宏的用户将会受到影响。

Android

PluginCall.getObject() / PluginCall.getArray()

为了与 iOS 行为保持一致,Android 上的 PluginCall.getObject()PluginCall.getArray() 现在可能返回 null。我们建议插件作者在处理这些方法返回值的代码周围执行空值检查。

在插件中将 Capacitor 升级至 5.0

使用 @capacitor/plugin-migration-v4-to-v5

在插件文件夹中运行 npx @capacitor/plugin-migration-v4-to-v5@latest,它将自动执行所有文件更改。

手动更新文件

更新 package.json

@capacitor/cli@capacitor/core@capacitor/android@capacitor/ios 更新至 latest-5 版本。

将 targetSDK / compileSDK 更新至 33

# build.gradle

android {
- compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 32
+ compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
- targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 32
+ targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 33

更新 Android 插件变量

build.gradle 文件中,更新以下包版本的最低要求:

ext {
junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
- androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.4.2'
+ androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
- androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.3'
+ androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
- androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.4.0'
+ androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'

将 Gradle 插件更新至 8.0.0

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

将 Gradle 包装器更新至 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

将包声明移至 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 project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33

禁用 Jetifier

# gradle.properties

# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
- # Automatically convert third-party libraries to use AndroidX
- android.enableJetifier=true

更新至 Java 17

# build.gradle
compileOptions {
- sourceCompatibility JavaVersion.VERSION_11
+ sourceCompatibility JavaVersion.VERSION_17
- targetCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_17
}

更新 kotlin_version

如果你的插件使用 Kotlin,请更新默认的 kotlin_version

# build.gradle
buildscript {
- ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.7.0'
+ ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.8.20'
repositories {

并将 org.jetbrains.kotlin:kotlin-stdlib-jdk7org.jetbrains.kotlin:kotlin-stdlib-jdk8 依赖项替换为 org.jetbrains.kotlin:kotlin-stdlib

# build.gradle
dependencies {
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"