[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78C1NFFS2KJD2XTAAM1DFST":3,"skill-same:01M78C1NFFS2KJD2XTAAM1DFST":50},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":14,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M78C1NFFS2KJD2XTAAM1DFST","google-mobile-ads-android-migrate-to-next-gen",null,"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.","Solizardking\u002Fskillhub-main","Solizardking","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F108096810?v=4","01M786KDB10AYV042N0F9BD5B5","Clawd","01M786NYYXSZK1D05WM8JQPC48",0,"MIT","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fgoogle\u002Fads\u002Fgoogle-mobile-ads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: google-mobile-ads-android-migrate-to-next-gen\ndescription: Migrates Android applications from the old, legacy Google Mobile\n  Ads (GMA) SDK (com.google.android.gms:play-services-ads) to the new GMA\n  Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk).\n  Provides comprehensive mapping tables for imports, classes, and method\n  signatures to help determine migration steps. Use when migrating an existing\n  Android codebase from the old, legacy GMA SDK to GMA Next-Gen SDK.\nmetadata:\n  version: 1.1.0\n  category: GoogleAds\n---\n# AI Migration Agent Instructions for the Google Mobile Ads SDK\n\n## Migration Workflow\n\nUse this checklist to track your migration progress:\n\n*   **Configure Gradle**:\n    -   [ ] Replace `com.google.android.gms:play-services-ads` with the latest\n        stable version of\n        `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. If you\n        cannot access Maven directly, run the following command to fetch the\n        latest version. The version returned in the `latest` tag is the latest\n        version of the GMA Next-Gen SDK:\n\n        ```bash\n        curl -sS https:\u002F\u002Fdl.google.com\u002Fdl\u002Fandroid\u002Fmaven2\u002Fcom\u002Fgoogle\u002Fandroid\u002Flibraries\u002Fads\u002Fmobile\u002Fsdk\u002Fads-mobile-sdk\u002Fmaven-metadata.xml | sed -n 's\u002F.*\u003Clatest>\\(.*\\)\u003C\\\u002Flatest>.*\u002F\\1\u002Fp'\n        ```\n\n    -   [ ] Update `minSdk` (24+) and `compileSdk` (34+).\n    -   [ ] Exclude `play-services-ads` and `play-services-ads-lite` from all\n        dependencies globally in the app-level build file to avoid duplicate\n        symbol errors.\n    -   [ ] Sync Gradle before moving on to the next step.\n*   **Per-File Migration**:\n    -   [ ] Refactor the codebase following the API Mapping and Method Mapping\n        tables to migrate imports, class names, and method signature to GMA\n        Next-Gen SDK.\n*   **Verify and Build**:\n    -   [ ] Run `gradle build -x test` to confirm a successful clean build.\n        Resolve any GMA SDK related compile errors.\n\n## Core Migration Rules\n\n*   **App ID Usage**: **Always** use the value of the\n    `com.google.android.gms.ads.APPLICATION_ID` meta-data tag from\n    `AndroidManifest.xml` for the `applicationId` in `InitializationConfig`.\n    *   *Constraint*: Preserve the `\u003Cmeta-data>` tag in the manifest; it is\n        still required for publishers using the User Messaging Platform SDK.\n*   **Initialization Sequence**:\n    1.  Call `MobileAds.initialize()` on a background thread.\n    2.  Ensure `initialize()` is called **before** any other SDK methods.\n    3.  If using `RequestConfiguration`, bundle it into\n        `InitializationConfig.Builder.setRequestConfiguration()`. **Do not**\n        call `MobileAds.setRequestConfiguration()` before initialization.\n*   **UI Threading**: **MANDATORY**: Callbacks in GMA-Next Gen SDK are invoked\n    on a background thread. **ALL UI-RELATED OPERATIONS** (e.g., Toasts, View\n    updates, Fragment transactions) **MUST** be wrapped in `runOnUiThread {}` or\n    `Dispatchers.Main.launch {}` within GMA SDK callbacks. SKIPPING THIS STEP\n    WILL CAUSE THE APPLICATION TO CRASH.\n*   **Mediation**: Classes implementing\n    `com.google.android.gms.ads.mediation.Adapter` MUST continue using\n    `com.google.android.gms.ads`.\n\n## Format Specifics\n\n### Banner Ads\n\n*   Use `com.google.android.libraries.ads.mobile.sdk.banner.AdView` for loading\n    GMA Next-Gen SDK banners.\n*   The following API checks if a banner is collapsible:\n    `adView.getBannerAd().isCollapsible()`.\n\n### Native Ads\n\n*   **NativeAdLoader**: `NativeAdLoader` is abstract and cannot be instantiated.\n    It is used statically (e.g., `NativeAdLoader.load(...)`).\n*   The following APIs are now set on the `NativeAdRequest.Builder`:\n    *   `.setCustomFormatIds(customFormatIds: List\u003CString>)`\n    *   `.disableImageDownloading()`\n    *   `.setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)`\n    *   `.setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)`\n    *   `.setVideoOptions(videoOptions: VideoOptions)`\n*   **Removal**: Delete all \"Mute This Ad\" logic; it is unsupported in GMA\n    Next-Gen SDK.\n*   **MediaView**: `NativeAd` no longer has a direct `mediaView` variable; use\n    `registerNativeAd(nativeAd, mediaView)` to associate the ad with the view.\n\n### Ad preloading\n\n*   Unless specified in the mapping table, ad preloading methods in the GMA\n    Next-Gen SDK retain the same API signatures and parameters as the Old SDK.\n\n## API Mapping\n\nThis table covers the main classes and their GMA Next-Gen SDK equivalents.\n\n| Feature                    | Old SDK Import (`com.google.android.gms.ads...`)                                     | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` )                                                                                                           |\n|:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                   |                                                                                      |                                                                                                                                                                                       |\n| Initialization             | `MobileAds`                                                                          | `MobileAds`, `initialization.InitializationConfig`                                                                                                                                    |\n| Initialization Listener    | `initialization.OnInitializationCompleteListener`                                    | `initialization.OnAdapterInitializationCompleteListener`                                                                                                                              |\n| 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)           |\n| Load Error                 | `LoadAdError`                                                                        | `common.LoadAdError` (`LoadAdError` no longer has a domain variable. REMOVE the domain variable if found.)                                                                            |\n| Full Screen Show Error     | `AdError` (within `FullScreenContentCallback`)                                       | `common.FullScreenContentError` (within format-specific `AdEventCallback`)                                                                                                            |\n| Request Configuration      | `RequestConfiguration`                                                               | `common.RequestConfiguration` (Nested Enums\u002FConstants for RequestConfiguration are now under common.RequestConfiguration.)                                                            |\n| 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`. |\n| **Tools**                  |                                                                                      |                                                                                                                                                                                       |\n| Ad Inspector               | `MobileAds.openAdInspector()`                                                        | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity)                                                                                                         |\n| Ad Inspector Listener      | `OnAdInspectorClosedListener`                                                        | `common.OnAdInspectorClosedListener`                                                                                                                                                  |\n| **Formats**                |                                                                                      |                                                                                                                                                                                       |\n| App Open                   | `appopen.AppOpenAd`                                                                  | `appopen.AppOpenAd`                                                                                                                                                                   |\n| App Open Load              | `appopen.AppOpenAd.AppOpenAdLoadCallback`                                            | `common.AdLoadCallback\u003Cappopen.AppOpenAd>`                                                                                                                                            |\n| Banner                     | `AdView`, `AdSize`                                                                   | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`.                                            |\n| Banner Load                | `AdListener`                                                                         | `common.AdLoadCallback\u003Cbanner.BannerAd>`                                                                                                                                              |\n| Banner Events              | `AdListener`                                                                         | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback`                                                                                                                      |\n| Interstitial               | `interstitial.InterstitialAd`                                                        | `interstitial.InterstitialAd`                                                                                                                                                         |\n| Interstitial Load          | `interstitial.InterstitialAd.InterstitialAdLoadCallback`                             | `common.AdLoadCallback\u003Cinterstitial.InterstitialAd>`                                                                                                                                  |\n| Ad Loader                  | `AdLoader`                                                                           | `nativead.NativeAdLoader`                                                                                                                                                             |\n| Native                     | `nativead.NativeAd`                                                                  | `nativead.NativeAd` (No longer has a `mediaView` variable)                                                                                                                            |\n| Native Custom Format Ad    | `nativead.NativeCustomFormatAd`                                                      | `nativead.CustomNativeAd`                                                                                                                                                             |\n| Native Custom Click        | `nativead.NativeCustomFormatAd.OnCustomClickListener`                                | `nativead.OnCustomClickListener` (set on the `CustomNativeAd` object (e.g., `.onCustomClickListener`)                                                                                 |\n| Native Load                | `nativead.NativeAd.OnNativeAdLoadedListener`                                         | `nativead.NativeAdLoaderCallback`                                                                                                                                                     |\n| Native Ad View             | `nativead.NativeAdView`                                                              | `nativead.NativeAdView`                                                                                                                                                               |\n| Media Content              | `MediaContent`                                                                       | `nativead.MediaContent` (hasVideoContent is declared as a `val`)                                                                                                                      |\n| Media Aspect Ratio         | `MediaAspectRatio`                                                                   | `nativead.MediaAspectRatio`                                                                                                                                                           |\n| Video Options              | `VideoOptions`                                                                       | `common.VideoOptions`                                                                                                                                                                 |\n| Video Controller           | `VideoController`                                                                    | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoController.VideoLifecycleCallbacks { ... }`)                                |\n| Rewarded                   | `rewarded.RewardedAd`                                                                | `rewarded.RewardedAd`                                                                                                                                                                 |\n| Rewarded Load              | `rewarded.RewardedAd.RewardedAdLoadCallback`                                         | `common.AdLoadCallback\u003Crewarded.RewardedAd>`                                                                                                                                          |\n| Rewarded Interstitial      | `rewardedinterstitial.RewardedInterstitialAd`                                        | `rewardedinterstitial.RewardedInterstitialAd`                                                                                                                                         |\n| Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback`     | `common.AdLoadCallback\u003Crewardedinterstitial.RewardedInterstitialAd>`                                                                                                                  |\n| Paid Event Listener        | `OnPaidEventListener`                                                                | `common.AdEventCallback`                                                                                                                                                              |\n| Response Info              | `ResponseInfo`                                                                       | `common.ResponseInfo`                                                                                                                                                                 |\n| Adapter Response Info      | `AdapterResponseInfo`                                                                | `common.AdSourceResponseInfo`                                                                                                                                                         |\n| **Rewards**                |                                                                                      |                                                                                                                                                                                       |\n| Reward Listener            | `OnUserEarnedRewardListener`                                                         | `rewarded.OnUserEarnedRewardListener`                                                                                                                                                 |\n| Reward Item                | `rewarded.RewardItem`                                                                | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`)                                                                         |\n| Ad Value                   | `AdValue`                                                                            | `common.AdValue`                                                                                                                                                                      |\n| **Preloading**             |                                                                                      |                                                                                                                                                                                       |\n| Configuration              | `preload.PreloadConfiguration`                                                       | `common.PreloadConfiguration`                                                                                                                                                         |\n| Callback                   | `preload.PreloadCallbackV2`                                                          | `common.PreloadCallback` (Now an interface instead of an abstract class)                                                                                                              |\n| Interstitial Preloader     | `interstitial.InterstitialPreloader`                                                 | `interstitial.InterstitialAdPreloader`                                                                                                                                                |\n| **Ad Manager**             |                                                                                      |                                                                                                                                                                                       |\n| Ad Request                 | `admanager.AdManagerAdRequest`                                                       | `common.AdRequest` (Now directly implemented in the `AdRequest` class)                                                                                                                |\n| Ad View                    | `admanager.AdView`                                                                   | `banner.AdView` (No `AdManagerAdView` class)                                                                                                                                          |\n| App Event Listener         | `admanager.AppEventListener`                                                         | `common.OnAppEventListener`                                                                                                                                                           |\n\n## Method Mapping\n\nThis table covers the main methods and their GMA Next-Gen SDK equivalents.\n\n| Feature                                  | Old SDK Method Signature                                                                                                                     | GMA Next-Gen SDK Method Signature                                                                                                                                                                                                                                                          |\n|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                                 |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| MobileAds Initialization                 | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)`                                                           | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)`                                                                                                                                                                            |\n| InitializationConfig Builder             | N\u002FA                                                                                                                                          | `InitializationConfig.Builder(String applicationId)`                                                                                                                                                                                                                                       |\n| 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\u003CNativeAdType>).build()` |\n| Add Network Extras (AdMobAdapter)        | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)`                                                                                                                                                                                                             |\n| Add Network Extras (Ad Source Adapter)   | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class\u003CMediationExtrasReceiver> adapterClass, Bundle adSourceExtras)`                                                                                                                                                           |\n| Custom Targeting                         | `AdRequest.Builder().setCustomTargeting(String key, String value)`                                                                           | `AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)`                                                                                                                                                                                                          |\n| **Formats**                              |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| App Open                                 | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)`                                    | `AppOpenAd.load(AdRequest request, AdLoadCallback\u003CAppOpenAd> loadCallback)`                                                                                                                                                                                                                |\n| Banner                                   | `AdView.loadAd(AdRequest request)`                                                                                                           | `AdView.loadAd(BannerAdRequest request, AdLoadCallback\u003CBannerAd> loadCallback)`                                                                                                                                                                                                            |\n| Interstitial                             | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)`                          | `InterstitialAd.load(AdRequest request, AdLoadCallback\u003CInterstitialAd> loadCallback)`                                                                                                                                                                                                      |\n| Rewarded                                 | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)`                                  | `RewardedAd.load(AdRequest request, AdLoadCallback\u003CRewardedAd> loadCallback)`                                                                                                                                                                                                              |\n| Rewarded Interstitial                    | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)`          | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback\u003CRewardedInterstitialAd> loadCallback)`                                                                                                                                                                                      |\n| Native Builder                           | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)`                 | `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>)` (Include `NativeAd.NativeAdType.NATIVE` in `nativeAdTypes`)                                                                                                                                                  |\n| Native Load                              | `AdLoader.Builder(...).build().loadAd(AdRequest request)`                                                                                    | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)`                                                                                                                                                                                                            |\n| Native Ad Register                       | `NativeAdView.setNativeAd(NativeAd nativeAd)`                                                                                                | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)`                                                                                                                                                                                                                  |\n| Set an App Event Listener (Banner)       | `AdManagerAdView.appEventListener`                                                                                                           | `BannerAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `BannerAdEventCallback`)                                                                                                                                                                          |\n| Set an App Event Listener (Interstitial) | `AdManagerInterstitialAd.appEventListener`                                                                                                   | `InterstitialAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `InterstitialAdEventCallback`)                                                                                                                                                              |\n| **Callbacks**                            |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| onAdOpened                               | `AdListener.onAdOpened()`                                                                                                                    | `AdEventCallback.onAdShowedFullScreenContent()`                                                                                                                                                                                                                                            |\n| onAdClosed                               | `AdListener.onAdClosed()`                                                                                                                    | `AdEventCallback.onAdDismissedFullScreenContent()`                                                                                                                                                                                                                                         |\n| onFailedToShowFullScreenContent          | `onAdFailedToShowFullScreenContent(adError: AdError)`                                                                                        | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)`                                                                                                                                                                                                        |\n| 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)`                                                                                                                                |\n| onAdFailedToLoad                         | `onAdFailedToLoad(loadAdError: LoadAdError)`                                                                                                 | `onAdFailedToLoad(adError: LoadAdError)`                                                                                                                                                                                                                                                   |\n| onCustomFormatAdLoaded                   | `OnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)`                                                             | `NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)`                                                                                                                                                                                                             |\n| onPaidEventListener                      | `OnPaidEventListener.onPaidEvent(AdValue value)`                                                                                             | `AdEventCallback.onAdPaid(value: AdValue)` (Format-specific e.g., `banner.BannerAdEventCallback.onAdPaid(value: AdValue)`)                                                                                                                                                                 |\n| onVideoMute                              | `onVideoMute(muted: Boolean)`                                                                                                                | `onVideoMute(isMuted: Boolean)`                                                                                                                                                                                                                                                            |\n| onAdPreloaded                            | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)`                                                                              | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)`                                                                                                                                                                                                                             |\n| **Preloading**                           |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Configuration                            | `PreloadConfiguration.Builder(String adUnitId).build()`                                                                                      | `PreloadConfiguration(AdRequest request)`                                                                                                                                                                                                                                                  |\n| **Response Info**                        |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Get Response Info                        | `ad.responseInfo`                                                                                                                            | `ad.getResponseInfo()`                                                                                                                                                                                                                                                                     |\n| Loaded Adapter Responses Info            | `responseInfo.getLoadedAdapterResponseInfo()`                                                                                                | `responseInfo.loadedAdSourceResponseInfo`                                                                                                                                                                                                                                                  |\n| Get Adapter Responses                    | `responseInfo.getAdapterResponses()`                                                                                                         | `responseInfo.adSourceResponses`                                                                                                                                                                                                                                                           |\n| Get Mediation Adapter Class              | `responseInfo.getMediationAdapterClassName()`                                                                                                | `responseInfo.adapterClassName`                                                                                                                                                                                                                                                            |\n| **Adapter Response Info**                |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Ad Source ID                             | `AdapterResponseInfo.getAdSourceId()`                                                                                                        | `AdSourceResponseInfo.id`                                                                                                                                                                                                                                                                  |\n| Ad Source Name                           | `AdapterResponseInfo.getAdSourceName()`                                                                                                      | `AdSourceResponseInfo.name`                                                                                                                                                                                                                                                                |\n| Ad Source Instance ID                    | `AdapterResponseInfo.getAdSourceInstanceId()`                                                                                                | `AdSourceResponseInfo.instanceId`                                                                                                                                                                                                                                                          |\n| Ad Source Instance Name                  | `AdapterResponseInfo.getAdSourceInstanceName()`                                                                                              | `AdSourceResponseInfo.instanceName`                                                                                                                                                                                                                                                        |\n\n","# AI Migration Agent Instructions for the Google Mobile Ads SDK\n\n## Migration Workflow\n\nUse this checklist to track your migration progress:\n\n*   **Configure Gradle**:\n    -   [ ] Replace `com.google.android.gms:play-services-ads` with the latest\n        stable version of\n        `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. If you\n        cannot access Maven directly, run the following command to fetch the\n        latest version. The version returned in the `latest` tag is the latest\n        version of the GMA Next-Gen SDK:\n\n        ```bash\n        curl -sS https:\u002F\u002Fdl.google.com\u002Fdl\u002Fandroid\u002Fmaven2\u002Fcom\u002Fgoogle\u002Fandroid\u002Flibraries\u002Fads\u002Fmobile\u002Fsdk\u002Fads-mobile-sdk\u002Fmaven-metadata.xml | sed -n 's\u002F.*\u003Clatest>\\(.*\\)\u003C\\\u002Flatest>.*\u002F\\1\u002Fp'\n        ```\n\n    -   [ ] Update `minSdk` (24+) and `compileSdk` (34+).\n    -   [ ] Exclude `play-services-ads` and `play-services-ads-lite` from all\n        dependencies globally in the app-level build file to avoid duplicate\n        symbol errors.\n    -   [ ] Sync Gradle before moving on to the next step.\n*   **Per-File Migration**:\n    -   [ ] Refactor the codebase following the API Mapping and Method Mapping\n        tables to migrate imports, class names, and method signature to GMA\n        Next-Gen SDK.\n*   **Verify and Build**:\n    -   [ ] Run `gradle build -x test` to confirm a successful clean build.\n        Resolve any GMA SDK related compile errors.\n\n## Core Migration Rules\n\n*   **App ID Usage**: **Always** use the value of the\n    `com.google.android.gms.ads.APPLICATION_ID` meta-data tag from\n    `AndroidManifest.xml` for the `applicationId` in `InitializationConfig`.\n    *   *Constraint*: Preserve the `\u003Cmeta-data>` tag in the manifest; it is\n        still required for publishers using the User Messaging Platform SDK.\n*   **Initialization Sequence**:\n    1.  Call `MobileAds.initialize()` on a background thread.\n    2.  Ensure `initialize()` is called **before** any other SDK methods.\n    3.  If using `RequestConfiguration`, bundle it into\n        `InitializationConfig.Builder.setRequestConfiguration()`. **Do not**\n        call `MobileAds.setRequestConfiguration()` before initialization.\n*   **UI Threading**: **MANDATORY**: Callbacks in GMA-Next Gen SDK are invoked\n    on a background thread. **ALL UI-RELATED OPERATIONS** (e.g., Toasts, View\n    updates, Fragment transactions) **MUST** be wrapped in `runOnUiThread {}` or\n    `Dispatchers.Main.launch {}` within GMA SDK callbacks. SKIPPING THIS STEP\n    WILL CAUSE THE APPLICATION TO CRASH.\n*   **Mediation**: Classes implementing\n    `com.google.android.gms.ads.mediation.Adapter` MUST continue using\n    `com.google.android.gms.ads`.\n\n## Format Specifics\n\n### Banner Ads\n\n*   Use `com.google.android.libraries.ads.mobile.sdk.banner.AdView` for loading\n    GMA Next-Gen SDK banners.\n*   The following API checks if a banner is collapsible:\n    `adView.getBannerAd().isCollapsible()`.\n\n### Native Ads\n\n*   **NativeAdLoader**: `NativeAdLoader` is abstract and cannot be instantiated.\n    It is used statically (e.g., `NativeAdLoader.load(...)`).\n*   The following APIs are now set on the `NativeAdRequest.Builder`:\n    *   `.setCustomFormatIds(customFormatIds: List\u003CString>)`\n    *   `.disableImageDownloading()`\n    *   `.setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)`\n    *   `.setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)`\n    *   `.setVideoOptions(videoOptions: VideoOptions)`\n*   **Removal**: Delete all \"Mute This Ad\" logic; it is unsupported in GMA\n    Next-Gen SDK.\n*   **MediaView**: `NativeAd` no longer has a direct `mediaView` variable; use\n    `registerNativeAd(nativeAd, mediaView)` to associate the ad with the view.\n\n### Ad preloading\n\n*   Unless specified in the mapping table, ad preloading methods in the GMA\n    Next-Gen SDK retain the same API signatures and parameters as the Old SDK.\n\n## API Mapping\n\nThis table covers the main classes and their GMA Next-Gen SDK equivalents.\n\n| Feature                    | Old SDK Import (`com.google.android.gms.ads...`)                                     | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` )                                                                                                           |\n|:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                   |                                                                                      |                                                                                                                                                                                       |\n| Initialization             | `MobileAds`                                                                          | `MobileAds`, `initialization.InitializationConfig`                                                                                                                                    |\n| Initialization Listener    | `initialization.OnInitializationCompleteListener`                                    | `initialization.OnAdapterInitializationCompleteListener`                                                                                                                              |\n| 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)           |\n| Load Error                 | `LoadAdError`                                                                        | `common.LoadAdError` (`LoadAdError` no longer has a domain variable. REMOVE the domain variable if found.)                                                                            |\n| Full Screen Show Error     | `AdError` (within `FullScreenContentCallback`)                                       | `common.FullScreenContentError` (within format-specific `AdEventCallback`)                                                                                                            |\n| Request Configuration      | `RequestConfiguration`                                                               | `common.RequestConfiguration` (Nested Enums\u002FConstants for RequestConfiguration are now under common.RequestConfiguration.)                                                            |\n| 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`. |\n| **Tools**                  |                                                                                      |                                                                                                                                                                                       |\n| Ad Inspector               | `MobileAds.openAdInspector()`                                                        | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity)                                                                                                         |\n| Ad Inspector Listener      | `OnAdInspectorClosedListener`                                                        | `common.OnAdInspectorClosedListener`                                                                                                                                                  |\n| **Formats**                |                                                                                      |                                                                                                                                                                                       |\n| App Open                   | `appopen.AppOpenAd`                                                                  | `appopen.AppOpenAd`                                                                                                                                                                   |\n| App Open Load              | `appopen.AppOpenAd.AppOpenAdLoadCallback`                                            | `common.AdLoadCallback\u003Cappopen.AppOpenAd>`                                                                                                                                            |\n| Banner                     | `AdView`, `AdSize`                                                                   | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`.                                            |\n| Banner Load                | `AdListener`                                                                         | `common.AdLoadCallback\u003Cbanner.BannerAd>`                                                                                                                                              |\n| Banner Events              | `AdListener`                                                                         | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback`                                                                                                                      |\n| Interstitial               | `interstitial.InterstitialAd`                                                        | `interstitial.InterstitialAd`                                                                                                                                                         |\n| Interstitial Load          | `interstitial.InterstitialAd.InterstitialAdLoadCallback`                             | `common.AdLoadCallback\u003Cinterstitial.InterstitialAd>`                                                                                                                                  |\n| Ad Loader                  | `AdLoader`                                                                           | `nativead.NativeAdLoader`                                                                                                                                                             |\n| Native                     | `nativead.NativeAd`                                                                  | `nativead.NativeAd` (No longer has a `mediaView` variable)                                                                                                                            |\n| Native Custom Format Ad    | `nativead.NativeCustomFormatAd`                                                      | `nativead.CustomNativeAd`                                                                                                                                                             |\n| Native Custom Click        | `nativead.NativeCustomFormatAd.OnCustomClickListener`                                | `nativead.OnCustomClickListener` (set on the `CustomNativeAd` object (e.g., `.onCustomClickListener`)                                                                                 |\n| Native Load                | `nativead.NativeAd.OnNativeAdLoadedListener`                                         | `nativead.NativeAdLoaderCallback`                                                                                                                                                     |\n| Native Ad View             | `nativead.NativeAdView`                                                              | `nativead.NativeAdView`                                                                                                                                                               |\n| Media Content              | `MediaContent`                                                                       | `nativead.MediaContent` (hasVideoContent is declared as a `val`)                                                                                                                      |\n| Media Aspect Ratio         | `MediaAspectRatio`                                                                   | `nativead.MediaAspectRatio`                                                                                                                                                           |\n| Video Options              | `VideoOptions`                                                                       | `common.VideoOptions`                                                                                                                                                                 |\n| Video Controller           | `VideoController`                                                                    | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoController.VideoLifecycleCallbacks { ... }`)                                |\n| Rewarded                   | `rewarded.RewardedAd`                                                                | `rewarded.RewardedAd`                                                                                                                                                                 |\n| Rewarded Load              | `rewarded.RewardedAd.RewardedAdLoadCallback`                                         | `common.AdLoadCallback\u003Crewarded.RewardedAd>`                                                                                                                                          |\n| Rewarded Interstitial      | `rewardedinterstitial.RewardedInterstitialAd`                                        | `rewardedinterstitial.RewardedInterstitialAd`                                                                                                                                         |\n| Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback`     | `common.AdLoadCallback\u003Crewardedinterstitial.RewardedInterstitialAd>`                                                                                                                  |\n| Paid Event Listener        | `OnPaidEventListener`                                                                | `common.AdEventCallback`                                                                                                                                                              |\n| Response Info              | `ResponseInfo`                                                                       | `common.ResponseInfo`                                                                                                                                                                 |\n| Adapter Response Info      | `AdapterResponseInfo`                                                                | `common.AdSourceResponseInfo`                                                                                                                                                         |\n| **Rewards**                |                                                                                      |                                                                                                                                                                                       |\n| Reward Listener            | `OnUserEarnedRewardListener`                                                         | `rewarded.OnUserEarnedRewardListener`                                                                                                                                                 |\n| Reward Item                | `rewarded.RewardItem`                                                                | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`)                                                                         |\n| Ad Value                   | `AdValue`                                                                            | `common.AdValue`                                                                                                                                                                      |\n| **Preloading**             |                                                                                      |                                                                                                                                                                                       |\n| Configuration              | `preload.PreloadConfiguration`                                                       | `common.PreloadConfiguration`                                                                                                                                                         |\n| Callback                   | `preload.PreloadCallbackV2`                                                          | `common.PreloadCallback` (Now an interface instead of an abstract class)                                                                                                              |\n| Interstitial Preloader     | `interstitial.InterstitialPreloader`                                                 | `interstitial.InterstitialAdPreloader`                                                                                                                                                |\n| **Ad Manager**             |                                                                                      |                                                                                                                                                                                       |\n| Ad Request                 | `admanager.AdManagerAdRequest`                                                       | `common.AdRequest` (Now directly implemented in the `AdRequest` class)                                                                                                                |\n| Ad View                    | `admanager.AdView`                                                                   | `banner.AdView` (No `AdManagerAdView` class)                                                                                                                                          |\n| App Event Listener         | `admanager.AppEventListener`                                                         | `common.OnAppEventListener`                                                                                                                                                           |\n\n## Method Mapping\n\nThis table covers the main methods and their GMA Next-Gen SDK equivalents.\n\n| Feature                                  | Old SDK Method Signature                                                                                                                     | GMA Next-Gen SDK Method Signature                                                                                                                                                                                                                                                          |\n|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                                 |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| MobileAds Initialization                 | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)`                                                           | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)`                                                                                                                                                                            |\n| InitializationConfig Builder             | N\u002FA                                                                                                                                          | `InitializationConfig.Builder(String applicationId)`                                                                                                                                                                                                                                       |\n| 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\u003CNativeAdType>).build()` |\n| Add Network Extras (AdMobAdapter)        | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)`                                                                                                                                                                                                             |\n| Add Network Extras (Ad Source Adapter)   | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class\u003CMediationExtrasReceiver> adapterClass, Bundle adSourceExtras)`                                                                                                                                                           |\n| Custom Targeting                         | `AdRequest.Builder().setCustomTargeting(String key, String value)`                                                                           | `AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)`                                                                                                                                                                                                          |\n| **Formats**                              |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| App Open                                 | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)`                                    | `AppOpenAd.load(AdRequest request, AdLoadCallback\u003CAppOpenAd> loadCallback)`                                                                                                                                                                                                                |\n| Banner                                   | `AdView.loadAd(AdRequest request)`                                                                                                           | `AdView.loadAd(BannerAdRequest request, AdLoadCallback\u003CBannerAd> loadCallback)`                                                                                                                                                                                                            |\n| Interstitial                             | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)`                          | `InterstitialAd.load(AdRequest request, AdLoadCallback\u003CInterstitialAd> loadCallback)`                                                                                                                                                                                                      |\n| Rewarded                                 | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)`                                  | `RewardedAd.load(AdRequest request, AdLoadCallback\u003CRewardedAd> loadCallback)`                                                                                                                                                                                                              |\n| Rewarded Interstitial                    | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)`          | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback\u003CRewardedInterstitialAd> loadCallback)`                                                                                                                                                                                      |\n| Native Builder                           | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)`                 | `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>)` (Include `NativeAd.NativeAdType.NATIVE` in `nativeAdTypes`)                                                                                                                                                  |\n| Native Load                              | `AdLoader.Builder(...).build().loadAd(AdRequest request)`                                                                                    | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)`                                                                                                                                                                                                            |\n| Native Ad Register                       | `NativeAdView.setNativeAd(NativeAd nativeAd)`                                                                                                | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)`                                                                                                                                                                                                                  |\n| Set an App Event Listener (Banner)       | `AdManagerAdView.appEventListener`                                                                                                           | `BannerAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `BannerAdEventCallback`)                                                                                                                                                                          |\n| Set an App Event Listener (Interstitial) | `AdManagerInterstitialAd.appEventListener`                                                                                                   | `InterstitialAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `InterstitialAdEventCallback`)                                                                                                                                                              |\n| **Callbacks**                            |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| onAdOpened                               | `AdListener.onAdOpened()`                                                                                                                    | `AdEventCallback.onAdShowedFullScreenContent()`                                                                                                                                                                                                                                            |\n| onAdClosed                               | `AdListener.onAdClosed()`                                                                                                                    | `AdEventCallback.onAdDismissedFullScreenContent()`                                                                                                                                                                                                                                         |\n| onFailedToShowFullScreenContent          | `onAdFailedToShowFullScreenContent(adError: AdError)`                                                                                        | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)`                                                                                                                                                                                                        |\n| 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)`                                                                                                                                |\n| onAdFailedToLoad                         | `onAdFailedToLoad(loadAdError: LoadAdError)`                                                                                                 | `onAdFailedToLoad(adError: LoadAdError)`                                                                                                                                                                                                                                                   |\n| onCustomFormatAdLoaded                   | `OnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)`                                                             | `NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)`                                                                                                                                                                                                             |\n| onPaidEventListener                      | `OnPaidEventListener.onPaidEvent(AdValue value)`                                                                                             | `AdEventCallback.onAdPaid(value: AdValue)` (Format-specific e.g., `banner.BannerAdEventCallback.onAdPaid(value: AdValue)`)                                                                                                                                                                 |\n| onVideoMute                              | `onVideoMute(muted: Boolean)`                                                                                                                | `onVideoMute(isMuted: Boolean)`                                                                                                                                                                                                                                                            |\n| onAdPreloaded                            | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)`                                                                              | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)`                                                                                                                                                                                                                             |\n| **Preloading**                           |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Configuration                            | `PreloadConfiguration.Builder(String adUnitId).build()`                                                                                      | `PreloadConfiguration(AdRequest request)`                                                                                                                                                                                                                                                  |\n| **Response Info**                        |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Get Response Info                        | `ad.responseInfo`                                                                                                                            | `ad.getResponseInfo()`                                                                                                                                                                                                                                                                     |\n| Loaded Adapter Responses Info            | `responseInfo.getLoadedAdapterResponseInfo()`                                                                                                | `responseInfo.loadedAdSourceResponseInfo`                                                                                                                                                                                                                                                  |\n| Get Adapter Responses                    | `responseInfo.getAdapterResponses()`                                                                                                         | `responseInfo.adSourceResponses`                                                                                                                                                                                                                                                           |\n| Get Mediation Adapter Class              | `responseInfo.getMediationAdapterClassName()`                                                                                                | `responseInfo.adapterClassName`                                                                                                                                                                                                                                                            |\n| **Adapter Response Info**                |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Ad Source ID                             | `AdapterResponseInfo.getAdSourceId()`                                                                                                        | `AdSourceResponseInfo.id`                                                                                                                                                                                                                                                                  |\n| Ad Source Name                           | `AdapterResponseInfo.getAdSourceName()`                                                                                                      | `AdSourceResponseInfo.name`                                                                                                                                                                                                                                                                |\n| Ad Source Instance ID                    | `AdapterResponseInfo.getAdSourceInstanceId()`                                                                                                | `AdSourceResponseInfo.instanceId`                                                                                                                                                                                                                                                          |\n| Ad Source Instance Name                  | `AdapterResponseInfo.getAdSourceInstanceName()`                                                                                              | `AdSourceResponseInfo.instanceName`                                                                                                                                                                                                                                                        |\n\n",{"name":5,"metadata":24,"description":7},{"version":25,"category":26},"1.1.0","GoogleAds","main","be3de0244dc1a57e323d8160787ebb40fb64930e","skills\u002Fgoogle\u002Fads\u002Fgoogle-mobile-ads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main","https:\u002F\u002Fskills.x402.wtf","https:\u002F\u002Fgithub.com\u002FSolizardking","https:\u002F\u002Fmusebook.trade","Got a mile high and never came down","2026-10-08 23:20:13",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add Solizardking\u002Fskillhub-main --skill google-mobile-ads-android-migrate-to-next-gen",{"tool":42,"command":43},"bunx","bunx skills add Solizardking\u002Fskillhub-main --skill google-mobile-ads-android-migrate-to-next-gen",{"tool":45,"command":46},"pnpm","pnpm dlx skills add Solizardking\u002Fskillhub-main --skill google-mobile-ads-android-migrate-to-next-gen","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fgoogle\u002Fads\u002Fgoogle-mobile-ads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen\u002FSKILL.md",true,[],[51,58,65,72,79,87],{"skillNo":52,"name":53,"nameZh":6,"description":54,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M78E0TGCAMNPS207BA3G07S7","zkrouter","Self-hosted OpenAI-compatible LLM router — smart tier-based routing, ZK-stamped routing decisions, mode overrides, free OpenRouter at install via the Birth bot. Save 60-80% on inference costs by routing to the cheapest capable model across 12+ OpenRouter models.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fzkrouter\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M78E0R1Z8BDT6EDTHY17MTNB","zk","For custom ZK Solana programs and privacy-preserving applications to prevent double spending. Guide to integrate rent-free nullifier PDAs for double-spend prevention.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fzk\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M78E0P3ZTZ1YWF8MD5MM23QE","zk-omni-messaging","Zero-knowledge omnichain messaging between Robinhood Chain and Solana using CheshireZkOmniMessenger (msgType 4) with nullifier anti-replay and the zk-omni-relayer service.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fzk-omni-messaging\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M78E0JXZ2PNB1896VXAGDBWD","zerion-wallet-data","Use when the user asks to check a wallet's portfolio, token balances, DeFi positions, PnL, transaction history, or NFTs. Provides interpreted on-chain data across 40+ EVM chains and Solana via x402 pay-per-request or API key — no raw RPC decoding needed.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fzerion-wallet-data\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M78E0G14FH9GRRTQYMKD5E59","youtube-clipper","YouTube 视频智能剪辑工具。下载视频和字幕，AI 分析生成精细章节（几分钟级别）， 用户选择片段后自动剪辑、翻译字幕为中英双语、烧录字幕到视频，并生成总结文案。 使用场景：当用户需要剪辑 YouTube 视频、生成短视频片段、制作双语字幕版本时。 关键词：视频剪辑、YouTube、字幕翻译、双语字幕、视频下载、clip video","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-clipper\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-clipper\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M78E0C2ZYA99CFFDNB7ZMK5S","yield-optimization","Multi-chain yield optimization via yield.xyz (StakeKit). Discover 2,988+ yield opportunities across 75+ blockchains, build deposit\u002Fwithdrawal transactions with shell scripts, and sign them with a MoonPay wallet. Use when the user wants to earn yield, find the best lending or staking rate, enter\u002Fexit a position, or check portfolio balances.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Fskillhub-main\u002Fblob\u002Fmain\u002Fskills\u002Fyield-optimization\u002FSKILL.md",[],[]]