К основному содержанию
скилл CX Codex

capacitor-plugin-upgrade-v4-to-v5 — скилл для Claude Code: миграция

Ведёт плагин Capacitor с версии 4 на 5: запускает официальный мигратор, потом добивает Gradle, Java 17 и правки в коде.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Cap-go/capgo-skills --skill capacitor-plugin-upgrade-v4-to-v5 -a claude-code
Открыть на GitHub

Что делает capacitor-plugin-upgrade-v4-to-v5

Скилл для тех, кто поддерживает библиотеку плагинов Capacitor и хочет, чтобы она собиралась в приложениях на Capacitor 5. Сначала он проверяет по снимку проекта, что @capacitor/core действительно 4.x, и просит чистый git status. Затем запускает npx @capacitor/plugin-migration-v4-to-v5@latest — команда правит package.json, android/build.gradle, wrapper, gradle.properties и манифест. После неё стоит посмотреть git diff: часть изменений мигратор не применяет.

Ручной чек-лист закрывает остальное. Dev-зависимости @capacitor/cli, core, android, ios переводятся на latest-5, peer-зависимость @capacitor/core — на ^5.0.0. В Android это compile/target SDK 33, AGP 8.0.0, Gradle 8.0.2, namespace в блоке android {} вместо package= в манифесте, Java 17, удаление Jetifier и Kotlin 1.8.20 с kotlin-stdlib. В iOS-коде требования CAPBridgedPlugin переезжают на уровень экземпляра: pluginId становится identifier, pluginMethods типизируется как [CAPPluginMethod], getMethod(_:) убирается. Плагинам на макросе CAP_PLUGIN это не нужно.

Главная ловушка на Android: call.getObject(key) и call.getArray(key) теперь могут вернуть null. Если ключ обязательный, добавьте проверку и call.reject(...) с внятным сообщением, иначе получите NullPointerException в рантайме. Скилл не подходит для миграции самого приложения, для других мажорных версий и для библиотек вне Capacitor — для приложения берите capacitor-app-upgrade-v4-to-v5.

Какие задачи решает

  • перевести библиотеку плагина с Capacitor 4 на 5
  • починить сборку плагина с ошибкой Namespace not specified
  • заменить package= в манифесте на namespace в build.gradle
  • добавить проверки на null после getObject() и getArray()
  • перенести требования CAPBridgedPlugin на уровень экземпляра в iOS

Примеры запросов агенту

  • прогони миграцию плагина Capacitor с 4 на 5 и покажи git diff
  • проверь, что в package.json все @capacitor/* на 5.x, и добери ручной чек-лист
  • найди в android/src/main/ вызовы getObject( и getArray( и добавь проверки на null

Как установить capacitor-plugin-upgrade-v4-to-v5

1Через Skills CLI (Vercel)

npx skills add Cap-go/capgo-skills --skill capacitor-plugin-upgrade-v4-to-v5 -a claude-code

2Вручную: положить файлы

~/.claude/skills/capacitor-plugin-upgrade-v4-to-v5/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/capacitor-plugin-upgrade-v4-to-v5/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о capacitor-plugin-upgrade-v4-to-v5

Как установить capacitor-plugin-upgrade-v4-to-v5 в Claude?

Выполните npx skills add Cap-go/capgo-skills --skill capacitor-plugin-upgrade-v4-to-v5 -a claude-code. Скилл появится в ~/.claude/skills/capacitor-plugin-upgrade-v4-to-v5/SKILL.md.

Что делает capacitor-plugin-upgrade-v4-to-v5?

Проводит плагин Capacitor с версии 4 на 5: запускает npx @capacitor/plugin-migration-v4-to-v5@latest, затем вручную правит Gradle, манифест, Java 17, Kotlin и код на iOS и Android.

Чем этот скилл отличается от capacitor-app-upgrade-v4-to-v5?

Этот работает с библиотекой плагинов, а не с приложением. Если обновлять нужно само приложение, берите capacitor-app-upgrade-v4-to-v5; для перехода с 5 на 6 есть отдельный скилл.

Исходный текст

SKILL.md · MIT
---
name: capacitor-plugin-upgrade-v4-to-v5
description: Upgrades a Capacitor plugin library from v4 to v5 using `npx @capacitor/plugin-migration-v4-to-v5@latest`, then the manual checklist - `@capacitor/*` dev deps to `latest-5`, compile/target SDK 33 defaults, AGP 8.0.0, Gradle 8.0.2, `namespace` in build.gradle instead of manifest `package`, Java 17, Jetifier removal, Kotlin 1.8.20 with `kotlin-stdlib`, plus code changes - `CAPBridgedPlugin` requirements moved to instance level (`pluginId` -> `identifier`, `pluginMethods` typed `[CAPPluginMethod]`) and Android `PluginCall.getObject()` / `getArray()` may return null. Use when a plugin's peer dependency is Capacitor 4 and it must support 5, or apps on v5 fail with "Namespace not specified" in the plugin module. Do not use for app upgrades, other major versions, or non-Capacitor libraries.
allowed-tools:
  - Bash(node -e *)
  - Bash(find *)
---

# Capacitor Plugin Upgrade v4 to v5

Move a plugin library to Capacitor 5. Source of truth: https://capacitorjs.com/docs/updating/plugins/5-0

## When to Use

- Snapshot shows `@capacitor/core` 4.x in peer/dev deps and the plugin must work in Capacitor 5 apps.
- A Capacitor 5 app fails building this plugin with `Namespace not specified` or Java 17 errors.
- The plugin manually conforms to `CAPBridgedPlugin` or calls `getObject()` / `getArray()`.

Do not use:

- Upgrading an app -> `capacitor-app-upgrade-v4-to-v5`.
- Plugin already on 5 -> `capacitor-plugin-upgrade-v5-to-v6`. Multi-hop -> `capacitor-plugin-upgrades`.

## Live Project Snapshot

Plugin and Capacitor package snapshot:
!`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=['package.name='+(pkg.name||''),'package.version='+(pkg.version||'')];for(const section of ['peerDependencies','dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.join('\n'))"`

Example and native project paths:
!`find . -maxdepth 3 \( -path './example-app' -o -path './ios' -o -path './android' \)`

## References

| File | Load when |
| --- | --- |
| `references/android.md` | Applying Gradle, manifest, Java or Kotlin changes by hand |

## Preflight

| Tool | Minimum |
| --- | --- |
| Node.js | 16+ |
| Xcode | 14.1+ |
| Java | 17 (AGP 8) |
| AGP / Gradle | 8.0.0 / 8.0.2 |
| Android SDK defaults | compileSdk 33, targetSdk 33, minSdk 22 |
| iOS deployment target | 13.0 (unchanged) |

## Procedure

1. Confirm the plugin is on 4.x from the snapshot and the tree is clean (`git status`).
2. From the plugin root run:

   ```bash
   npx @capacitor/plugin-migration-v4-to-v5@latest
   ```

   It edits `package.json`, `android/build.gradle`, the wrapper, `gradle.properties`, and the manifest. Review `git diff`.
3. Finish manually anything not applied (`references/android.md`):
   - `@capacitor/cli`, `core`, `android`, `ios` dev deps to `latest-5`; peer `@capacitor/core` to `^5.0.0`.
   - SDK defaults 33, AGP 8.0.0, Gradle 8.0.2, `namespace` in `android {}` and no `package=` in the manifest, Java 17, Jetifier removed, Kotlin 1.8.20 with `kotlin-stdlib`.
4. **iOS code**: if the plugin conforms to `CAPBridgedPlugin` manually (no `CAP_PLUGIN` macro), move requirements to instance level, rename `pluginId` to `identifier`, type `pluginMethods` as `[CAPPluginMethod]`, and drop `getMethod(_:)`. Macro-based plugins need no change.
5. **Android code**: `call.getObject(key)` and `call.getArray(key)` can now return `null`. Add null checks and `call.reject(...)` with a clear message when required.
6. Update the example app (if present) to Capacitor 5 via `capacitor-app-upgrade-v4-to-v5`.
7. Bump the plugin major version and note "Requires Capacitor 5" in the changelog/README.

## Verification

```bash
grep -n "\"@capacitor/" package.json                         # 5.x everywhere
grep -n "package=" android/src/main/AndroidManifest.xml      # expect none
grep -n "namespace\|VERSION_17\|gradle:8.0.0" android/build.gradle
grep -rn "kotlin-stdlib-jdk" android/build.gradle            # expect none
grep -rn "getObject(\|getArray(" android/src/main/           # each result null-checked
grep -rn "pluginId\b" ios/                                   # only CAPPlugin usages remain
npm run build
npm run verify        # plugin template script: verify:ios + verify:android + verify:web, if present
cd android && ./gradlew clean build test
```

Run the example app on both platforms and exercise every method.

## Error Handling

| Error | Fix |
| --- | --- |
| `Namespace not specified` | Add `namespace "<package>"` to `android {}` in the plugin `build.gradle`. |
| `Android Gradle plugin requires Java 17 to run` | Switch the Gradle JDK to 17. |
| `NullPointerException` from `getObject`/`getArray` | Add null checks (step 5). |
| Swift: type does not conform to protocol `CAPBridgedPlugin` | Use instance-level `identifier`, `jsName`, `pluginMethods`, or switch to the macro. |
| `Duplicate class ... kotlin-stdlib-jdk8` | Replace `kotlin-stdlib-jdk7/jdk8` with `kotlin-stdlib`. |

© Cap-go · MIT · Cap-go/capgo-skills

Похожие скиллы

Всё по теме «Мобильная разработка» →
capacitor-plugin-upgrades capawesome-team Проведёт плагин Capacitor через мажорные версии 4–8, включая прыжки через несколько версий сразу. Пригодится, когда плагин отстал от текущего Capacitor. CX Codex +1 811установок agp-9-upgrade Google LLC Ведёт Android-проект с AGP 8 на Android Gradle Plugin 9: поднимает зависимости, переводит сборку на встроенный Kotlin и новый DSL. CX Codex +1 1 200установок capacitor-plugins capawesome-team Скилл проводит агента по установке и настройке плагинов Capacitor из шести источников, включая официальные, Capawesome и Firebase. CX Codex +1 1 800установок play-billing-library-version-upgrade Google LLC Скилл ведёт Android-проект с устаревшей Google Play Billing Library до актуальной стабильной версии. Он сам находит зависимость в Gradle и проверяет сборку после каждого шага. CX Codex +1 1 900установок upgrade-react-native react-native-community Обновляет проекты React Native Community CLI на заданную версию через diff-файлы React Native Upgrade Helper. CX Codex +1 1 300установок kotlin-multiplatform vitorpamplona Скилл подсказывает агенту, в какой модуль и source set положить код в Amethyst, и не даёт сломать сборку на гейте чистоты KMP. CX Codex +1 1 600установок

Из того же набора29

capgo-release-management Скилл ведёт релизы Capgo из CLI: загрузка бандлов, каналы, постепенный выкат, откат и шифрование. Пригодится, когда релиз ломается на загрузке или нужно откатить бандл. CX Codex +1 705установок capacitor-app-upgrade-v7-to-v8 Ведёт приложение на Capacitor 7 к восьмой версии: сначала npx cap migrate, потом ручной чек-лист по iOS и Android. CX Codex +1 704установок webapp-to-capacitor Планирует и выполняет превращение веб-приложения, PWA или SPA в приложение под iOS и Android на Capacitor, которое проходит ревью магазинов. CX Codex +1 665установок ionic-appflow-migration Переводит Ionic или Capacitor проект с Ionic Appflow на Capgo: живые обновления, сборки и публикация в стор. CX Codex +1 653установок capacitor-app-upgrade-v6-to-v7 Ведёт приложение на Capacitor с версии 6 на 7: сначала автоматическая миграция, потом ручной чек-лист по iOS, Android и плагинам. CX Codex +1 643установок capacitor-app-upgrade-v5-to-v6 Ведёт приложение на Capacitor с версии 5 на 6: запускает npx cap migrate, потом добивает ручной чеклист по Android и iOS. CX Codex +1 639установок capacitor-app-upgrade-v4-to-v5 Скилл ведёт приложение на Capacitor 4 к версии 5: запускает npx cap migrate, добивает пропущенное вручную и проверяет сборку. CX Codex +1 639установок capacitor-plugin-upgrade-v5-to-v6 Ведёт плагин Capacitor с версии 5 на 6: запускает официальный мигратор, потом добивает ручной чек-лист по Gradle, Kotlin и TypeScript. CX Codex +1 633установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой