Migrate with AI tools (beta)

To optimize migrating from Google Mobile Ads SDK to GMA Next-Gen SDK with your AI tool, add a skill to your AI environment. By adding a skill, you provide your AI tool with context specific to GMA Next-Gen SDK and improve the output of AI-assisted code generation.

This guide covers optimizing your AI model to help migrate from Google Mobile Ads SDK to GMA Next-Gen SDK .

Prerequisites

If you use Android Studio, do the following:

Add a skill

Google provides a SKILL.md file with instructions for your AI tool to help you with migration steps.

To use a skill specific to GMA Next-Gen SDK with your AI tool, follow these steps:

Android Studio

  1. In your project's root directory, create a folder named .skills/ .

  2. Create a directory for your skill named gma-migrate-to-next-gen .

  3. In the gma-migrate-to-next-gen directory, create a file named SKILL.md .

  4. In your SKILL.md file, add the following instructions:

    ---
    name: gma-migrate-to-next-gen
    description: Migrates applications from the old 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). Use when
      migrating an existing codebase from the old SDK to the new Next-Gen SDK.
      Includes comprehensive mapping tables for imports, classes, and method
      signatures to help determine migration steps.
    metadata: version: 1.0 
     --- 
     # 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` 
    .  
     - 
      
    [ ] Update `minSdk` 
    (24+) and `compileSdk` 
    (35+).  
     - 
      
    [ ] 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** 
    :  
     - 
      
    [ ] Confirm a successful clean build. ## Core Migration Rules 
     * 
      
     **SDK Versions** 
    : **ALWAYS** 
    look up and use the latest stable version for `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk` 
    . Do not assume
        a version number. * 
      
     **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. Wrap UI-related operations (Toasts, View updates) in `runOnUiThread {}` 
    or `Dispatchers.Main.launch {}` 
    within SDK callbacks. * 
      
     **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 
     * 
      
    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` 
    |
    | 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` 
    (property access is now `getResponseInfo()` 
    . `loadedAdapterResponseInfo` 
    is now `loadedAdSourceResponseInfo` 
    .)                                                  |
    | **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()` 
    |
    | onAdClosed                               | `AdListener.onAdClosed()` 
    | `AdEventCallback.onAdDismissedFullScreenContent()` 
    |
    | onFailedToShowFullScreenContent          | `onAdFailedToShowFullScreenContent(adError: AdError)` 
    | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)` 
    |
    | onAdLoaded                               | **AdLoadCallback** 
    : `onAdLoaded(ad: T)` 
    (e.g., `InterstitialAdLoadCallback` 
    , `RewardedAdLoadCallback` 
    , `RewardedInterstitialAdLoadCallback` 
    ) | Parameter name is always `ad` 
     **Format specific** 
    : `onAdLoaded(ad: InterstitialAd)` 
    , `onAdLoaded(ad: RewardedAd)` 
    , `onAdLoaded(ad: RewardedInterstitialAd)` 
    |
    | onAdFailedToLoad                         | `onAdFailedToLoad(loadAdError: LoadAdError)` 
    | `onAdFailedToLoad(adError: LoadAdError)` 
    |
    | onCustomFormatAdLoaded                   | `OnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)` 
    | `NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)` 
    |
    | onPaidEventListener                      | `OnPaidEventListener.onPaidEvent(AdValue value)` 
    | `AdEventCallback.onAdPaid(value: AdValue)` 
    (Format-specific e.g., `banner.BannerAdEventCallback.onAdPaid(value: AdValue)` 
    )                                                                                                                                                                 |
    | onVideoMute                              | `onVideoMute(muted: Boolean)` 
    | `onVideoMute(isMuted: Boolean)` 
    |
    | onAdPreloaded                            | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)` 
    | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)` 
    |
    | **Preloading** 
    |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |
    | Configuration                            | `PreloadConfiguration.Builder(String adUnitId).build()` 
    | `PreloadConfiguration(AdRequest request)` 
    |

    For details, see Extend Agent Mode with skills .

Invoke the skill in your prompt

After you have added the skill to your project, use the following example prompts to invoke it in your AI tool:

Android Studio

To invoke the skill, type @ and select the gma-migrate-to-next-gen skill.

 @gma-migrate-to-next-gen Migrate the files in my project from the old Google Mobile Ads SDK 
to the new GMA Next-Gen SDK 
 

Leave feedback

We are continuing to evaluate and optimize context provided to AI code assist tools to improve their responses on GMA Next-Gen SDK topics.

If you have feedback on optimizing Gemini for GMA Next-Gen SDK , join the GMA Next-Gen SDK Discord channel .

Create a Mobile Website
View Site in Mobile | Classic
Share by: