代码中的重大变更
iOS
CAPBridgedProtocol 协议变更
CAPBridgedPlugin
协议要求已从类级别移至实例级别pluginId
重命名为identifier
以避免与CAPPlugin.pluginId
冲突,同时移除了getMethod(_:)
要求(该功能已通过内部扩展方法实现)pluginMethods
类型从泛型Any
明确为CAPPluginMethod
大多数用户不会遇到问题,因为当前惯例是使用宏来生成 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 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
迁移包声明至 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 版本
若插件使用 Kotlin,需更新默认版本:
# 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-jdk7
或 org.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"