Skip to main content
skill Claude Code Gemini CLI CX Codex official · Google

google-mobile-ads-android-migrate-to-next-gen — Claude Code skill

Guides Android projects through a move from the legacy Google Mobile Ads SDK to GMA Next-Gen. Use it when updating an existing ad integration and checking the resulting code.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code
Open on GitHub

What google-mobile-ads-android-migrate-to-next-gen does

The skill breaks migration into Gradle setup, per-file API changes, and a build check. It helps replace the SDK dependency, review minSdk and compileSdk requirements, then update imports, class names, and method signatures using mapping tables. The suggested build command is gradle build -x test.

It also covers initialization order, RequestConfiguration, and UI work inside background-thread callbacks. Ad requests use format-specific classes. The “Mute This Ad” logic must be removed because Next-Gen does not support it; associate a native ad with its media view using registerNativeAd. Mediation adapters implementing Adapter still use com.google.android.gms.ads.

Install it for Claude Code with npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code. It is also listed for Codex and Gemini CLI. This is aimed at Android developers already migrating GMA; the project still needs a build check after the code changes.

What it helps with

  • replace the legacy GMA dependency in Gradle
  • update imports and method signatures for GMA Next-Gen
  • move RequestConfiguration into initialization setup
  • marshal UI operations from SDK callbacks to the main thread
  • check the migrated Android project with a build

Example prompts for the agent

  • Migrate this Android app from the legacy GMA SDK to GMA Next-Gen and update the Gradle dependency.
  • Review the banner and native ad code against the GMA Next-Gen API mappings.
  • Check GMA callbacks for UI-thread issues, then run `gradle build -x test`.

How to install google-mobile-ads-android-migrate-to-next-gen

1Skills CLI (Vercel)

npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code

2Manually: put the files in place

~/.claude/skills/google-mobile-ads-android-migrate-to-next-gen/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/google-mobile-ads-android-migrate-to-next-gen/

From the same set172

The whole set →
bigquery-basics official google Manages BigQuery resources and runs SQL queries. Use it to create datasets, tables and views, or handle basic data ingestion and analysis. Claude Code Gemini CLI CX Codex 17,678installs cloud-run-basics official google This skill helps an agent manage Cloud Run services, jobs, and worker pools when a project needs HTTP deployment, scheduled work, or pull-based background processing. Claude Code Gemini CLI CX Codex 17,532installs gemini-api official google Connects Gemini API from Google Cloud Agent Platform to the agent. Gives access to Gemini models, multimodal input, function calling, and context caching. Claude Code Gemini CLI CX Codex 17,116installs google-cloud-recipe-auth official Google LLC This skill explains Google Cloud authentication and permissions. Use it when setting up IAM, ADC, or service accounts for local code and production workloads. Claude Code Gemini CLI CX Codex 15,450installs google-cloud-recipe-onboarding official Google LLC Guides a developer through a first Google Cloud project: CLI checks, sign-in, project setup and billing. It fits a personal first project. Claude Code Gemini CLI CX Codex 15,390installs cloud-sql-basics official google This skill helps create and explain Cloud SQL resources for MySQL, PostgreSQL, and SQL Server. Use it when setting up a database in Google Cloud. Claude Code Gemini CLI CX Codex 14,679installs google-cloud-waf-security official google This skill reviews Google Cloud workloads against the security pillar of the Well-Architected Framework and suggests actions for IAM, networks, data, and operations. Claude Code Gemini CLI CX Codex 14,620installs google-cloud-waf-cost-optimization official google Reviews Google Cloud workloads through the Well-Architected Cost Optimization pillar. Use it to inspect spending, resize resources, assess discounts, or find idle capacity. Claude Code Gemini CLI CX Codex 14,266installs

Similar

agent-device callstack This skill lets an agent navigate apps on Apple platforms and Android, including TV devices. Use it to interact with screens, enter text, and inspect app state. Claude Code CX Codex Cursor +1 18,700installs flutter-build-responsive-layout flutter This skill guides coding agents to build adaptive Flutter UIs across mobile and desktop screens using LayoutBuilder and BoxConstraints. Claude Code CX Codex Cursor +1 42,300installs flutter-add-widget-test flutter A skill that teaches AI coders to write component-level Flutter tests using WidgetTester. Verifies how widgets render and respond to taps, scrolling, and text input. Claude Code CX Codex Cursor +1 39,000installs flutter-add-integration-test flutter Sets up the integration_test package for Flutter and turns MCP session interactions into repeatable end-to-end tests. Claude Code CX Codex Cursor +1 38,000installs vercel-react-native-skills vercel A rules pack for React Native and Expo work: lists, animations, navigation, native modules. Load it so your agent makes mobile changes the same way every time. Claude Code CX Codex Cursor +1 253,900installs animate-expo emilkowalski Builds React Native and Expo animations using Reanimated and Gesture Handler. Helps keep motion on the UI thread and avoid dropped frames on physical devices. Claude Code CX Codex Cursor +1 135,900installs mobile-native emilkowalski Strips the tells that give a web app away on a phone: sticky hover, tap highlight flash, the 100vh bug. Claude Code CX Codex Cursor +1 84,500installs aso coreyhaines31 Audits App Store and Google Play listings against store optimization standards. Helps uncover gaps in metadata, visual assets, and conversion. Claude Code CX Codex Cursor +1 74,900installs

Questions about google-mobile-ads-android-migrate-to-next-gen

How do I install google-mobile-ads-android-migrate-to-next-gen in Claude Code?

Run npx skills add google/skills --skill google-mobile-ads-android-migrate-to-next-gen -a claude-code.

What does google-mobile-ads-android-migrate-to-next-gen do?

It guides an Android codebase migration from the legacy Google Mobile Ads SDK to GMA Next-Gen, including dependency and API changes.

Which thread should handle UI work in GMA Next-Gen callbacks?

Callbacks run on a background thread. Wrap UI operations in runOnUiThread {} or use Dispatchers.Main.launch {}.

Source text

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

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor