Google Mobile Ads Android Migrate To Next Gen logo

Google Mobile Ads Android Migrate To Next Gen

OrganizationPopular
google
google-mobile-ads-android-migrate-to-next-gen

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.

Overview

Publishergoogle
Repositoryskills
Skill namegoogle-mobile-ads-android-migrate-to-next-gen
Stars
20.1K
Forks
1.6K
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by google on GitHub. Read the source before you install it.

Installation

Install the Google Mobile Ads Android Migrate To Next Gen AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/google/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/skills/ads/google-mobile-ads-android-migrate-to-next-gen .claude/skills/google-mobile-ads-android-migrate-to-next-gen
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Google Mobile Ads Android Migrate To Next Gen in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Google Mobile Ads Android Migrate To Next Gen on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Google Mobile Ads Android Migrate To Next Gen is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

FeatureOld SDK Import (com.google.android.gms.ads...)GMA Next-Gen SDK Import (com.google.android.libraries.ads.mobile.sdk... )
Core
InitializationMobileAdsMobileAds, initialization.InitializationConfig
Initialization Listenerinitialization.OnInitializationCompleteListenerinitialization.OnAdapterInitializationCompleteListener
Ad RequestAdRequestFormat specific (e.g. common.AdRequest, banner.BannerAdRequest, nativead.NativeAdRequest) (Ad Unit ID is declared in Builder. Load() no longer takes an activity)
Load ErrorLoadAdErrorcommon.LoadAdError (LoadAdError no longer has a domain variable. REMOVE the domain variable if found.)
Full Screen Show ErrorAdError (within FullScreenContentCallback)common.FullScreenContentError (within format-specific AdEventCallback)
Request ConfigurationRequestConfigurationcommon.RequestConfiguration (Nested Enums/Constants for RequestConfiguration are now under common.RequestConfiguration.)
Event CallbacksFullScreenContentCallback (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 InspectorMobileAds.openAdInspector()MobileAds.openAdInspector() (openAdInspector no longer takes an activity)
Ad Inspector ListenerOnAdInspectorClosedListenercommon.OnAdInspectorClosedListener
Formats
App Openappopen.AppOpenAdappopen.AppOpenAd
App Open Loadappopen.AppOpenAd.AppOpenAdLoadCallbackcommon.AdLoadCallback<appopen.AppOpenAd>
BannerAdView, AdSizebanner.AdView, banner.AdSize (AdView no longer has pause(), resume(), setAdSize()). AdSize is declared in BannerAdRequest.
Banner LoadAdListenercommon.AdLoadCallback<banner.BannerAd>
Banner EventsAdListenerbanner.BannerAdEventCallback, banner.BannerAdRefreshCallback
Interstitialinterstitial.InterstitialAdinterstitial.InterstitialAd
Interstitial Loadinterstitial.InterstitialAd.InterstitialAdLoadCallbackcommon.AdLoadCallback<interstitial.InterstitialAd>
Ad LoaderAdLoadernativead.NativeAdLoader
Nativenativead.NativeAdnativead.NativeAd (No longer has a mediaView variable)
Native Custom Format Adnativead.NativeCustomFormatAdnativead.CustomNativeAd
Native Custom Clicknativead.NativeCustomFormatAd.OnCustomClickListenernativead.OnCustomClickListener (set on the CustomNativeAd object (e.g., .onCustomClickListener)
Native Loadnativead.NativeAd.OnNativeAdLoadedListenernativead.NativeAdLoaderCallback
Native Ad Viewnativead.NativeAdViewnativead.NativeAdView
Media ContentMediaContentnativead.MediaContent (hasVideoContent is declared as a val)
Media Aspect RatioMediaAspectRationativead.MediaAspectRatio
Video OptionsVideoOptionscommon.VideoOptions
Video ControllerVideoControllercommon.VideoController (VideoLifecycleCallbacks is now an interface, so instantiate with object : VideoController.VideoLifecycleCallbacks { ... })
Rewardedrewarded.RewardedAdrewarded.RewardedAd
Rewarded Loadrewarded.RewardedAd.RewardedAdLoadCallbackcommon.AdLoadCallback<rewarded.RewardedAd>
Rewarded Interstitialrewardedinterstitial.RewardedInterstitialAdrewardedinterstitial.RewardedInterstitialAd
Rewarded Interstitial Loadrewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallbackcommon.AdLoadCallback<rewardedinterstitial.RewardedInterstitialAd>
Paid Event ListenerOnPaidEventListenercommon.AdEventCallback
Response InfoResponseInfocommon.ResponseInfo
Adapter Response InfoAdapterResponseInfocommon.AdSourceResponseInfo
Rewards
Reward ListenerOnUserEarnedRewardListenerrewarded.OnUserEarnedRewardListener
Reward Itemrewarded.RewardItemrewarded.RewardItem (property access on RewardedAd and RewardedInterstitialAd is now getRewardItem())
Ad ValueAdValuecommon.AdValue
Preloading
Configurationpreload.PreloadConfigurationcommon.PreloadConfiguration
Callbackpreload.PreloadCallbackV2common.PreloadCallback (Now an interface instead of an abstract class)
Interstitial Preloaderinterstitial.InterstitialPreloaderinterstitial.InterstitialAdPreloader
Ad Manager
Ad Requestadmanager.AdManagerAdRequestcommon.AdRequest (Now directly implemented in the AdRequest class)
Ad Viewadmanager.AdViewbanner.AdView (No AdManagerAdView class)
App Event Listeneradmanager.AppEventListenercommon.OnAppEventListener

Method Mapping

This table covers the main methods and their GMA Next-Gen SDK equivalents.

FeatureOld SDK Method SignatureGMA Next-Gen SDK Method Signature
Core
MobileAds InitializationMobileAds.initialize(Context context, OnInitializationCompleteListener listener)MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)
InitializationConfig BuilderN/AInitializationConfig.Builder(String applicationId)
Ad Request BuilderAdRequest.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 TargetingAdRequest.Builder().setCustomTargeting(String key, String value)AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)
Formats
App OpenAppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)AppOpenAd.load(AdRequest request, AdLoadCallback<AppOpenAd> loadCallback)
BannerAdView.loadAd(AdRequest request)AdView.loadAd(BannerAdRequest request, AdLoadCallback<BannerAd> loadCallback)
InterstitialInterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)InterstitialAd.load(AdRequest request, AdLoadCallback<InterstitialAd> loadCallback)
RewardedRewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)RewardedAd.load(AdRequest request, AdLoadCallback<RewardedAd> loadCallback)
Rewarded InterstitialRewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)RewardedInterstitialAd.load(AdRequest request, AdLoadCallback<RewardedInterstitialAd> loadCallback)
Native BuilderAdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>) (Include NativeAd.NativeAdType.NATIVE in nativeAdTypes)
Native LoadAdLoader.Builder(...).build().loadAd(AdRequest request)NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)
Native Ad RegisterNativeAdView.setNativeAd(NativeAd nativeAd)NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)
Set an App Event Listener (Banner)AdManagerAdView.appEventListenerBannerAd.adEventCallback (onAppEvent(name: String, data: String?) is now part of the BannerAdEventCallback)
Set an App Event Listener (Interstitial)AdManagerInterstitialAd.appEventListenerInterstitialAd.adEventCallback (onAppEvent(name: String, data: String?) is now part of the InterstitialAdEventCallback)
Callbacks
onAdOpenedAdListener.onAdOpened()AdEventCallback.onAdShowedFullScreenContent()
onAdClosedAdListener.onAdClosed()AdEventCallback.onAdDismissedFullScreenContent()
onFailedToShowFullScreenContentonAdFailedToShowFullScreenContent(adError: AdError)onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)
onAdLoadedAdLoadCallback: onAdLoaded(ad: T) (e.g., InterstitialAdLoadCallback, RewardedAdLoadCallback, RewardedInterstitialAdLoadCallback)Parameter name is always ad Format specific: onAdLoaded(ad: InterstitialAd), onAdLoaded(ad: RewardedAd), onAdLoaded(ad: RewardedInterstitialAd)
onAdFailedToLoadonAdFailedToLoad(loadAdError: LoadAdError)onAdFailedToLoad(adError: LoadAdError)
onCustomFormatAdLoadedOnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)
onPaidEventListenerOnPaidEventListener.onPaidEvent(AdValue value)AdEventCallback.onAdPaid(value: AdValue) (Format-specific e.g., banner.BannerAdEventCallback.onAdPaid(value: AdValue))
onVideoMuteonVideoMute(muted: Boolean)onVideoMute(isMuted: Boolean)
onAdPreloadedonAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)
Preloading
ConfigurationPreloadConfiguration.Builder(String adUnitId).build()PreloadConfiguration(AdRequest request)
Response Info
Get Response Infoad.responseInfoad.getResponseInfo()
Loaded Adapter Responses InforesponseInfo.getLoadedAdapterResponseInfo()responseInfo.loadedAdSourceResponseInfo
Get Adapter ResponsesresponseInfo.getAdapterResponses()responseInfo.adSourceResponses
Get Mediation Adapter ClassresponseInfo.getMediationAdapterClassName()responseInfo.adapterClassName
Adapter Response Info
Ad Source IDAdapterResponseInfo.getAdSourceId()AdSourceResponseInfo.id
Ad Source NameAdapterResponseInfo.getAdSourceName()AdSourceResponseInfo.name
Ad Source Instance IDAdapterResponseInfo.getAdSourceInstanceId()AdSourceResponseInfo.instanceId
Ad Source Instance NameAdapterResponseInfo.getAdSourceInstanceName()AdSourceResponseInfo.instanceName

Frequently asked questions

What does the Google Mobile Ads Android Migrate To Next Gen AI skill do?

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.

Why use Google Mobile Ads Android Migrate To Next Gen on TypingMind?

Because you install it once and use it with any model. Google Mobile Ads Android Migrate To Next Gen is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Google Mobile Ads Android Migrate To Next Gen in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/google/skills/tree/main/skills/ads/google-mobile-ads-android-migrate-to-next-gen. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Google Mobile Ads Android Migrate To Next Gen?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Google Mobile Ads Android Migrate To Next Gen?

As many as you like. As long as a model supports skills, you can use Google Mobile Ads Android Migrate To Next Gen with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Google Mobile Ads Android Migrate To Next Gen AI skill free?

Yes. It is published on GitHub by google under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇