关于 capacitor-app-upgrade-v6-to-v7
面向 Capacitor 6 应用的迁移技能,指导项目升级到 Capacitor 7。涵盖自动迁移、iOS 与 Android 配置、插件更新和验证,并列出常见错误处理方法。
主要功能
- 01检查项目版本与构建环境
- 02运行 CLI 自动迁移
- 03更新 iOS 与 Android 配置
- 04升级插件并修复类型变更
- 05执行构建与迁移验证
适用场景
- 01将 Capacitor 6 应用升级到 7
- 02排查升级后的 JDK 或 AGP 构建错误
- 03处理 iOS 部署目标与插件类型变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cap-go/ capgo-skills --skill capacitor-app-upgrade-v6-to-v7安装后在 Claude Code 中输入/capacitor-app-upgrade-v6-to-v7确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
metadata.jsonreferences/android.mdplugins.md详细介绍
Capacitor 应用从 v6 升级到 v7
将 Capacitor 6 应用升级到 Capacitor 7。权威来源:https://capacitorjs.com/docs/updating/7-0
适用场景
- 以下快照中的
@capacitor/core为6.x,用户想升级到7.x。 - 升级到 7 后,构建因 JDK 21 / AGP 8.7 错误、iOS 部署目标 13 错误,或已移除的弃用插件类型导致 TypeScript 错误而失败。
- 用户要求提供准确的 6 -> 7 检查清单。
请勿用于:
- 应用使用 5.x -> 先使用
capacitor-app-upgrade-v5-to-v6。应用使用 7.x -> 使用capacitor-app-upgrade-v7-to-v8。规划跨多个主版本的升级 -> 使用capacitor-app-upgrades。 - 插件库升级 -> 使用
capacitor-plugin-upgrade-v6-to-v7。 - 从 CocoaPods 迁移到 SPM -> 使用
cocoapods-to-spm。
当前项目快照
package.json 中当前的 Capacitor 包:
!node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const out=[];for(const section of ['dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"
参考资料
仅在涉及相关主题时加载参考资料。
| 文件 | 加载时机 |
|---|---|
references/android.md | 手动编辑 variables.gradle、build.gradle、wrapper、manifest 或 Kotlin 代码时 |
references/plugins.md | 应用使用官方 @capacitor/* 插件(App、Device、Haptics、Splash Screen、Status Bar 等)时 |
升级前检查
| 工具 | Capacitor 7 的最低要求 |
|---|---|
| Node.js | 20+(建议使用最新的 LTS 版本) |
| Xcode | 16.0+ |
| iOS 部署目标 | 14.0 |
| Android Studio | Ladybug 2024.2.1+(附带 JDK 21) |
| Java(Gradle JDK) | 21 |
| AGP / Gradle | 8.7.2 / 8.11.1 |
| Android SDK | minSdk 23、compileSdk 35、targetSdk 35 |
node -v && xcodebuild -version && java -version
git status --short
grep -rn "bundledWebRuntime\|staticPlugins" capacitor.config.*
操作步骤
-
根据快照确认版本为 6.x。注意:将 minSdk 降至 23、将 iOS 版本降至 14 会导致不再支持较旧设备;请告知用户。
-
运行自动迁移:
npm i -D @capacitor/cli@latest-7 npx cap migrate该操作会升级包版本、将 iOS 部署目标和 Podfile 提高到 14.0、更新 Gradle 文件和 wrapper,并运行
cap sync。完成所有报告为跳过或失败的步骤。 -
配置(
capacitor.config.*):bundledWebRuntime已移除。值为false-> 删除该项。值为true-> 应用必须使用打包工具(Vite、webpack 等)打包@capacitor/core,而不是加载capacitor.js。cordova.staticPlugins已移除。需要静态链接的 Cordova 插件必须使用带有use-framework的podspec标签(cordova-ios 7+ 不支持framework标签)。
-
iOS:在 Build Settings 中为项目和每个 Target 设置 iOS Deployment Target = 14.0,并在
ios/App/Podfile中设置platform :ios, '14.0'。对于 SPM 应用,检查CapApp-SPM/Package.swift中的平台设置。 -
Android:按照
references/android.md中的说明进行设置(AGP 8.7.2、Gradle 8.11.1、google-services 4.4.2、Kotlin 1.9.25,以及configChanges中可选的navigation)。 -
将
@capacitor/*插件更新到^7.0.0,并将社区插件更新到其 Capacitor 7 版本。按照references/plugins.md处理已移除的类型。 -
新 CLI 用户默认启用遥测,但遥测不会在 CI 中运行。如果用户希望关闭遥测,请运行
npx cap telemetry off。 -
运行验证。
注意事项
- 必须使用 JDK 21:Capacitor 7 的 Android 模块使用 Java 21 源代码和目标版本编译,因此使用 JDK 17 运行 Gradle 会报错
invalid source release: 21。请修正 Gradle JDK(IDE 和 CI 中均需修正),而不是修改代码。 - 仍声明
minSdkVersion 22或 iOS 13 的社区插件可以编译,但将@capacitor/corepeer 声明为^6的插件会导致 npmERESOLVE。请升级或替换这些插件;除非用户接受风险,否则请避免使用--legacy-peer-deps。 - Device 的
getInfo()不再返回diskFree、diskTotal、realDiskFree、realDiskTotal。仅当没有其他代码读取磁盘空间时,才删除对应的PrivacyInfo.xcprivacy磁盘空间条目。
验证
grep -rn "bundledWebRuntime\|staticPlugins" capacitor.config.* # expect none
grep -rn "IPHONEOS_DEPLOYMENT_TARGET" ios/App/App.xcodeproj/project.pbxproj | sort -u # 14.0
grep -n "platform :ios" ios/App/Podfile 2>/dev/null # '14.0'
grep -n "gradle:8.7.2\|google-services:4.4.2" android/build.gradle
grep -n "distributionUrl" android/gradle/wrapper/gradle-wrapper.properties # gradle-8.11.1
grep -n "SdkVersion" android/variables.gradle # 23 / 35 / 35
grep -rnE "AppUrlOpen|AppRestoredResult|DeviceBatteryInfo|DeviceLanguageCodeResult|Haptics(Impact|Notification)(Options|Type|Style)|SplashScreen(Show|Hide)Options|diskFree|diskTotal" src/
npx cap sync
cd android && ./gradlew assembleDebug
然后在 Xcode 16+ 中构建 iOS,并启动两个平台。
错误处理
| 错误 | 修复方法 |
|---|---|
Migrate can only be used on Capacitor 6, please use the CLI in Capacitor 6 to upgrade to 6 first | 先运行 capacitor-app-upgrade-v5-to-v6。 |
Capacitor 7 requires JDK 21 or higher. Some steps may fail. / invalid source release: 21 | 将 Gradle JDK 设置为 21(Android Studio Ladybug 已捆绑该版本),并在 CI 中设置。 |
Skipped updating deployment target | 在 Xcode 和 Podfile 中手动设置 iOS 14.0(步骤 4)。 |
Unable to find "<text>" in <file>. Try updating it manually | 应用 references/android.md 中的差异。 |
Module '"@capacitor/app"' has no exported member 'AppUrlOpen'(或类似错误) | 在 references/plugins.md 中将其重命名为替代类型。 |
ERESOLVE unable to resolve dependency tree,涉及 @capacitor/core | 某个插件仍依赖 v6;将其升级到 v7 版本。 |