google-mobile-ads-android-migrate-to-next-gen — скилл для Claude
Помогает перенести Android-приложение со старого Google Mobile Ads SDK на GMA Next-Gen. Подойдёт, если нужно обновить интеграцию и проверить связанные изменения кода.
npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-codeЧто делает google-mobile-ads-android-migrate-to-next-gen
Скилл ведёт миграцию по этапам: заменяет Gradle-зависимость, проверяет требования к minSdk и compileSdk, затем помогает обновить импорты, классы и сигнатуры методов по таблицам сопоставления. В конце предлагает собрать проект командой gradle build -x test.
Отдельные правила касаются инициализации SDK, передачи RequestConfiguration и вызовов UI из фоновых callback-функций. Для рекламы разных форматов используются свои классы запросов; логика «Mute This Ad» не поддерживается, а медиавью нужно связывать через registerNativeAd. Медиаторы, реализующие Adapter, продолжают использовать пакет com.google.android.gms.ads.
Скилл пригодится разработчикам Android-приложений, которые переходят на GMA Next-Gen и готовы проверять изменения сборкой. Для установки через Codex используйте npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a codex; также он доступен для Claude Code и Gemini CLI.
Какие задачи решает
- заменить зависимость старого GMA SDK в Gradle
- обновить импорты и сигнатуры методов для GMA Next-Gen
- перенести настройку инициализации и RequestConfiguration
- исправить UI-вызовы в callback-функциях SDK
- проверить миграцию сборкой Android-проекта
Примеры запросов агенту
- Перенеси это Android-приложение со старого GMA SDK на GMA Next-Gen и обнови Gradle-зависимость.
- Проверь импорты, классы и сигнатуры методов для миграции баннерной и нативной рекламы.
- Проверь callback-функции GMA SDK на UI-вызовы и собери проект командой `gradle build -x test`.
Как установить google-mobile-ads-android-migrate-to-next-gen
1Через Skills CLI (Vercel)
npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code2Вручную: положить файлы
~/.claude/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/google-mobile-ads-android-migrate-to-next-gen/
1Через Skills CLI (Vercel)
npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a codex2Вручную: положить файлы
.agents/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install google/skills google-mobile-ads-android-migrate-to-next-gen2Вручную: положить файлы
.github/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.md1Через Skills CLI (Vercel)
npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a gemini-cli2Командой платформы
gemini skills install https://github.com/google/skills --path skills/ads/google-mobile-ads-android-migrate-to-next-genВручную: положить файлы
.devin/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора172
Весь набор →Похожие
Вопросы о google-mobile-ads-android-migrate-to-next-gen
Как установить google-mobile-ads-android-migrate-to-next-gen в Claude Code?
Выполните npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code.
Что делает google-mobile-ads-android-migrate-to-next-gen?
Помогает перенести Android-приложение со старого Google Mobile Ads SDK на GMA Next-Gen: обновить Gradle-зависимость и код по таблицам сопоставления API.
Что проверить в callback-функциях после миграции на GMA Next-Gen?
Callback-функции вызываются в фоновом потоке. UI-операции в них нужно выполнять через runOnUiThread {} или Dispatchers.Main.launch {}.
Исходный текст
SKILL.md · Apache-2.0
---
name: google-mobile-ads-android-migrate-to-next-gen
description: Migrates Android applications from the old, legacy Google Mobile
Ads (GMA) SDK (com.google.android.gms:play-services-ads) to the new GMA
Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk).
Provides comprehensive mapping tables for imports, classes, and method
signatures to help determine migration steps. Use when migrating an existing
Android codebase from the old, legacy GMA SDK to GMA Next-Gen SDK.
metadata:
version: "1.1.0"
category: GoogleAds
---
# AI Migration Agent Instructions for the Google Mobile Ads SDK
## Migration Workflow
Use this checklist to track your migration progress:
* **Configure Gradle**:
- [ ] Replace `com.google.android.gms:play-services-ads` with the latest
stable version of
`com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. If you
cannot access Maven directly, run the following command to fetch the
latest version. The version returned in the `latest` tag is the latest
version of the GMA Next-Gen SDK:
```bash
curl -sS https://dl.google.com/dl/android/maven2/com/google/android/libraries/ads/mobile/sdk/ads-mobile-sdk/maven-metadata.xml | sed -n 's/.*<latest>\(.*\)<\/latest>.*/\1/p'
```
- [ ] Update `minSdk` (24+) and `compileSdk` (34+).
- [ ] Exclude `play-services-ads` and `play-services-ads-lite` from all
dependencies globally in the app-level build file to avoid duplicate
symbol errors.
- [ ] Sync Gradle before moving on to the next step.
* **Per-File Migration**:
- [ ] Refactor the codebase following the API Mapping and Method Mapping
tables to migrate imports, class names, and method signature to GMA
Next-Gen SDK.
* **Verify and Build**:
- [ ] Run `gradle build -x test` to confirm a successful clean build.
Resolve any GMA SDK related compile errors.
## Core Migration Rules
* **App ID Usage**: **Always** use the value of the
`com.google.android.gms.ads.APPLICATION_ID` meta-data tag from
`AndroidManifest.xml` for the `applicationId` in `InitializationConfig`.
* *Constraint*: Preserve the `<meta-data>` tag in the manifest; it is
still required for publishers using the User Messaging Platform SDK.
* **Initialization Sequence**:
1. Call `MobileAds.initialize()` on a background thread.
2. Ensure `initialize()` is called **before** any other SDK methods.
3. If using `RequestConfiguration`, bundle it into
`InitializationConfig.Builder.setRequestConfiguration()`. **Do not**
call `MobileAds.setRequestConfiguration()` before initialization.
* **UI Threading**: **MANDATORY**: Callbacks in GMA-Next Gen SDK are invoked
on a background thread. **ALL UI-RELATED OPERATIONS** (e.g., Toasts, View
updates, Fragment transactions) **MUST** be wrapped in `runOnUiThread {}` or
`Dispatchers.Main.launch {}` within GMA SDK callbacks. SKIPPING THIS STEP
WILL CAUSE THE APPLICATION TO CRASH.
* **Mediation**: Classes implementing
`com.google.android.gms.ads.mediation.Adapter` MUST continue using
`com.google.android.gms.ads`.
## Format Specifics
### Banner Ads
* Use `com.google.android.libraries.ads.mobile.sdk.banner.AdView` for loading
GMA Next-Gen SDK banners.
* The following API checks if a banner is collapsible:
`adView.getBannerAd().isCollapsible()`.
### Native Ads
* **NativeAdLoader**: `NativeAdLoader` is abstract and cannot be instantiated.
It is used statically (e.g., `NativeAdLoader.load(...)`).
* The following APIs are now set on the `NativeAdRequest.Builder`:
* `.setCustomFormatIds(customFormatIds: List<String>)`
* `.disableImageDownloading()`
* `.setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)`
* `.setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)`
* `.setVideoOptions(videoOptions: VideoOptions)`
* **Removal**: Delete all "Mute This Ad" logic; it is unsupported in GMA
Next-Gen SDK.
* **MediaView**: `NativeAd` no longer has a direct `mediaView` variable; use
`registerNativeAd(nativeAd, mediaView)` to associate the ad with the view.
### Ad preloading
* Unless specified in the mapping table, ad preloading methods in the GMA
Next-Gen SDK retain the same API signatures and parameters as the Old SDK.
## API Mapping
This table covers the main classes and their GMA Next-Gen SDK equivalents.
| Feature | Old SDK Import (`com.google.android.gms.ads...`) | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` ) |
|:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Core** | | |
| Initialization | `MobileAds` | `MobileAds`, `initialization.InitializationConfig` |
| Initialization Listener | `initialization.OnInitializationCompleteListener` | `initialization.OnAdapterInitializationCompleteListener` |
| Ad Request | `AdRequest` | *Format specific* (e.g. `common.AdRequest`, `banner.BannerAdRequest`, `nativead.NativeAdRequest`) (Ad Unit ID is declared in `Builder`. Load() no longer takes an activity) |
| Load Error | `LoadAdError` | `common.LoadAdError` (`LoadAdError` no longer has a domain variable. REMOVE the domain variable if found.) |
| Full Screen Show Error | `AdError` (within `FullScreenContentCallback`) | `common.FullScreenContentError` (within format-specific `AdEventCallback`) |
| Request Configuration | `RequestConfiguration` | `common.RequestConfiguration` (Nested Enums/Constants for RequestConfiguration are now under common.RequestConfiguration.) |
| Event Callbacks | `FullScreenContentCallback` (for full screen formats), `AdListener` (Banner, Native) | *Format Specific* (e.g., `interstitial.InterstitialAdEventCallback`, `banner.BannerAdEventCallback`, `native.NativeAdEventCallback`). Variable on the ad format is `adEventCallback`. |
| **Tools** | | |
| Ad Inspector | `MobileAds.openAdInspector()` | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity) |
| Ad Inspector Listener | `OnAdInspectorClosedListener` | `common.OnAdInspectorClosedListener` |
| **Formats** | | |
| App Open | `appopen.AppOpenAd` | `appopen.AppOpenAd` |
| App Open Load | `appopen.AppOpenAd.AppOpenAdLoadCallback` | `common.AdLoadCallback<appopen.AppOpenAd>` |
| Banner | `AdView`, `AdSize` | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`. |
| Banner Load | `AdListener` | `common.AdLoadCallback<banner.BannerAd>` |
| Banner Events | `AdListener` | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback` |
| Interstitial | `interstitial.InterstitialAd` | `interstitial.InterstitialAd` |
| Interstitial Load | `interstitial.InterstitialAd.InterstitialAdLoadCallback` | `common.AdLoadCallback<interstitial.InterstitialAd>` |
| Ad Loader | `AdLoader` | `nativead.NativeAdLoader` |
| Native | `nativead.NativeAd` | `nativead.NativeAd` (No longer has a `mediaView` variable) |
| Native Custom Format Ad | `nativead.NativeCustomFormatAd` | `nativead.CustomNativeAd` |
| Native Custom Click | `nativead.NativeCustomFormatAd.OnCustomClickListener` | `nativead.OnCustomClickListener` (set on the `CustomNativeAd` object (e.g., `.onCustomClickListener`) |
| Native Load | `nativead.NativeAd.OnNativeAdLoadedListener` | `nativead.NativeAdLoaderCallback` |
| Native Ad View | `nativead.NativeAdView` | `nativead.NativeAdView` |
| Media Content | `MediaContent` | `nativead.MediaContent` (hasVideoContent is declared as a `val`) |
| Media Aspect Ratio | `MediaAspectRatio` | `nativead.MediaAspectRatio` |
| Video Options | `VideoOptions` | `common.VideoOptions` |
| Video Controller | `VideoController` | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoController.VideoLifecycleCallbacks { ... }`) |
| Rewarded | `rewarded.RewardedAd` | `rewarded.RewardedAd` |
| Rewarded Load | `rewarded.RewardedAd.RewardedAdLoadCallback` | `common.AdLoadCallback<rewarded.RewardedAd>` |
| Rewarded Interstitial | `rewardedinterstitial.RewardedInterstitialAd` | `rewardedinterstitial.RewardedInterstitialAd` |
| Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback` | `common.AdLoadCallback<rewardedinterstitial.RewardedInterstitialAd>` |
| Paid Event Listener | `OnPaidEventListener` | `common.AdEventCallback` |
| Response Info | `ResponseInfo` | `common.ResponseInfo` |
| Adapter Response Info | `AdapterResponseInfo` | `common.AdSourceResponseInfo` |
| **Rewards** | | |
| Reward Listener | `OnUserEarnedRewardListener` | `rewarded.OnUserEarnedRewardListener` |
| Reward Item | `rewarded.RewardItem` | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`) |
| Ad Value | `AdValue` | `common.AdValue` |
| **Preloading** | | |
| Configuration | `preload.PreloadConfiguration` | `common.PreloadConfiguration` |
| Callback | `preload.PreloadCallbackV2` | `common.PreloadCallback` (Now an interface instead of an abstract class) |
| Interstitial Preloader | `interstitial.InterstitialPreloader` | `interstitial.InterstitialAdPreloader` |
| **Ad Manager** | | |
| Ad Request | `admanager.AdManagerAdRequest` | `common.AdRequest` (Now directly implemented in the `AdRequest` class) |
| Ad View | `admanager.AdView` | `banner.AdView` (No `AdManagerAdView` class) |
| App Event Listener | `admanager.AppEventListener` | `common.OnAppEventListener` |
## Method Mapping
This table covers the main methods and their GMA Next-Gen SDK equivalents.
| Feature | Old SDK Method Signature | GMA Next-Gen SDK Method Signature |
|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Core** | | |
| MobileAds Initialization | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)` | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)` |
| InitializationConfig Builder | N/A | `InitializationConfig.Builder(String applicationId)` |
| Ad Request Builder | `AdRequest.Builder().build()` | `AdRequest.Builder(String adUnitId).build()` (for App Open, Interstitial, Rewarded, Rewarded Interstitial) **Banner:** `BannerAdRequest.Builder(String adUnitId, AdSize adSize).build()` **Native:** `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>).build()` |
| Add Network Extras (AdMobAdapter) | `AdRequest.Builder().addNetworkExtrasBundle(Class<MediationExtrasReceiver>, Bundle networkExtras)` | `AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)` |
| Add Network Extras (Ad Source Adapter) | `AdRequest.Builder().addNetworkExtrasBundle(Class<MediationExtrasReceiver>, Bundle networkExtras)` | `AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class<MediationExtrasReceiver> adapterClass, Bundle adSourceExtras)` |
| Custom Targeting | `AdRequest.Builder().setCustomTargeting(String key, String value)` | `AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)` |
| **Formats** | | |
| App Open | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)` | `AppOpenAd.load(AdRequest request, AdLoadCallback<AppOpenAd> loadCallback)` |
| Banner | `AdView.loadAd(AdRequest request)` | `AdView.loadAd(BannerAdRequest request, AdLoadCallback<BannerAd> loadCallback)` |
| Interstitial | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)` | `InterstitialAd.load(AdRequest request, AdLoadCallback<InterstitialAd> loadCallback)` |
| Rewarded | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)` | `RewardedAd.load(AdRequest request, AdLoadCallback<RewardedAd> loadCallback)` |
| Rewarded Interstitial | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)` | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback<RewardedInterstitialAd> loadCallback)` |
| Native Builder | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)` | `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>)` (Include `NativeAd.NativeAdType.NATIVE` in `nativeAdTypes`) |
| Native Load | `AdLoader.Builder(...).build().loadAd(AdRequest request)` | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)` |
| Native Ad Register | `NativeAdView.setNativeAd(NativeAd nativeAd)` | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)` |
| Set an App Event Listener (Banner) | `AdManagerAdView.appEventListener` | `BannerAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `BannerAdEventCallback`) |
| Set an App Event Listener (Interstitial) | `AdManagerInterstitialAd.appEventListener` | `InterstitialAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `InterstitialAdEventCallback`) |
| **Callbacks** | | |
| onAdOpened | `AdListener.onAdOpened()` | `AdEventCallback.onAdShowedFullScreenContent()`...
© google · Apache-2.0 · google/skills