برای بهینهسازی مهاجرت از Google Mobile Ads SDK به GMA Next-Gen SDK با Gemini در اندروید استودیو، از یک فایل AGENTS.md در پروژه خود استفاده کنید. با افزودن یک فایل AGENTS.md به پروژه خود، زمینهای مختص به GMA Next-Gen SDK را در اختیار Gemini قرار میدهید و خروجی تولید کد با کمک هوش مصنوعی را بهبود میبخشید. برای جزئیات بیشتر، به بخش «سفارشیسازی Gemini با استفاده از فایلهای AGENTS.md مراجعه کنید.
این راهنما بهینهسازی Gemini در اندروید استودیو را پوشش میدهد تا به مهاجرت از Google Mobile Ads SDK به GMA Next-Gen SDK کمک کند.
قبل از اینکه شروع کنی
قبل از ادامه، موارد زیر را انجام دهید:
- آشنایی با Gemini در اندروید استودیو
- با استفاده از یک نسخه سازگار از اندروید استودیو، Gemini را در اندروید استودیو راهاندازی کنید .
فایل AGENTS.md را به پروژه خود اضافه کنید
گوگل یک فایل AGENTS.md با دستورالعملهایی برای Gemini ارائه میدهد تا در مراحل مهاجرت به شما کمک کند.
برای استفاده از دستورالعملهای مخصوص GMA Next-Gen SDK در کد کمکی هوش مصنوعی، مراحل زیر را دنبال کنید:
یک فایل جدید با نام
AGENTS.mdدر هر جایی از سیستم فایل پروژه خود ایجاد کنید.در فایل
AGENTS.mdخود، دستورالعملهای زیر را اضافه کنید:
# AI Migration Agent Instructions for the Google Mobile Ads SDK ## Migrate to the GMA Next-Gen SDK * When I ask to migrate to the "Next-Gen" SDK, **ALWAYS** look up the latest stable version for `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. * Make sure the project meets the SDK requirements of `minSdk` 24 or higher and `compileSdk` of 35 or higher. * Replace the `com.google.android.gms:play-services-ads` dependency with the Next-Gen `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk` dependency. * Resolve each `com.google.android.gms.ads.*` class to its specific counterpart in `com.google.android.libraries.ads.mobile.sdk.*`. * If the change involves the `com.google.android.gms.ads.mediation.Adapter` class, ask me if I'm sure I want to migrate this class before making the change. * **Important:** Make sure `MobileAds.initialize` is called **before** any other SDK methods (e.g., `MobileAds.getVersion()`, `MobileAds.openAdInspector()`). Move any such calls to the initialization callback or after initialization is complete. * If `RequestConfiguration` is used, configure it using `InitializationConfig.Builder.setRequestConfiguration()` and pass the config to `MobileAds.initialize()`. Do not call `MobileAds.setRequestConfiguration()` separately before initialization. * **ALWAYS** use the value of the `com.google.android.gms.ads.APPLICATION_ID` meta-data tag from `AndroidManifest.xml` for `applicationId`. If you can't find it, ask me what the AdMob application ID is. * **CRITICAL:** **Always** dispatch UI-related operations (e.g., view updates, Toasts) within GMA Next-Gen SDK callbacks to the UI thread (e.g., using `runOnUiThread` or `Main` dispatcher). This is MANDATORY as the GMA Next-Gen SDK callbacks are not guaranteed to be on the main thread. * Preserve the `com.google.android.gms.ads.APPLICATION_ID` `<meta-data>` tag in the `AndroidManifest.xml` file. * Run a build/compile check. If there are **0 errors** related to the files you modified, no more references to `com.google.android.gms.ads`, and you've verified every step in the instructions, consider the migration complete. ### Banner ads * Declare the preferred `com.google.android.libraries.ads.mobile.sdk.banner.AdView` class to load a "Next-Gen" banner ad instead of the deprecated `BannerAd` APIs. ### API mapping This table covers the main classes and their GMA Next-Gen SDK equivalents. | Feature | Old SDK Import (`com.google.android.gms.ads...`) | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` ) | |:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Core** | | | | Initialization | `MobileAds` | `MobileAds`, `initialization.InitializationConfig` | | Ad Request | `AdRequest` | *Format specific* (e.g. `common.AdRequest`, `banner.BannerAdRequest`, `nativead.NativeAdRequest`) (Ad Unit ID is declared in `Builder`. Load() no longer takes an activity) | | Load Error | `LoadAdError` | `common.LoadAdError` (`LoadAdError` no longer has a domain variable) | | Full Screen Show Error | `AdError` (within `FullScreenContentCallback`) | `common.FullScreenContentError` (within format-specific `AdEventCallback`) | | Request Configuration | `RequestConfiguration` | `common.RequestConfiguration` | | Event Callbacks | `FullScreenContentCallback` (for full screen formats), `AdListener` (Banner, Native) | *Format Specific* (e.g., `interstitial.InterstitialAdEventCallback`, `banner.BannerAdEventCallback`, `native.NativeAdEventCallback`). Variable on the ad format is `adEventCallback`. | | **Tools** | | | | Ad Inspector | `MobileAds.openAdInspector()` | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity) | | Ad Inspector Listener | `OnAdInspectorClosedListener` | `common.OnAdInspectorClosedListener` | | **Formats** | | | | App Open | `appopen.AppOpenAd` | `appopen.AppOpenAd` | | App Open Load | `appopen.AppOpenAd.AppOpenAdLoadCallback` | `common.AdLoadCallback<appopen.AppOpenAd>` | | Banner | `AdView`, `AdSize` | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`. | | Banner Load | `AdListener` | `common.AdLoadCallback<banner.BannerAd>` | | Banner Events | `AdListener` | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback` | | Interstitial | `interstitial.InterstitialAd` | `interstitial.InterstitialAd` | | Interstitial Load | `interstitial.InterstitialAd.InterstitialAdLoadCallback` | `common.AdLoadCallback<interstitial.InterstitialAd>` | | Ad Loader | `AdLoader` | `nativead.NativeAdLoader` | | Native | `nativead.NativeAd` | `nativead.NativeAd` (No longer has a `mediaView` variable), Native ad types are imported in `NativeAd.NativeAdType` | | Native Load | `nativead.NativeAd.OnNativeAdLoadedListener` | `nativead.NativeAdLoaderCallback` | | Native Ad View | `nativead.NativeAdView` | `nativead.NativeAdView` | | Media Content | `MediaContent` | `nativeAd.MediaContent` (hasVideoContent is declared as a `val`) | | Video Options | `VideoOptions` | `common.VideoOptions` (VideoOptions (e.g., `setStartMuted()`) are declared in `VideoOptions.Builder()` and videoOptions is set on `NativeAdRequest`) | | Video Controller | `VideoController` | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoLifecycleCallbacks { ... }`) | | Rewarded | `rewarded.RewardedAd` | `rewarded.RewardedAd` | | Rewarded Load | `rewarded.RewardedAd.RewardedAdLoadCallback` | `common.AdLoadCallback<rewarded.RewardedAd>` | | Rewarded Interstitial | `rewardedinterstitial.RewardedInterstitialAd` | `rewardedinterstitial.RewardedInterstitialAd` | | Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback` | `common.AdLoadCallback<rewardedinterstitial.RewardedInterstitialAd>` | | **Rewards** | | | | Reward Listener | `OnUserEarnedRewardListener` | `rewarded.OnUserEarnedRewardListener` | | Reward Item | `rewarded.RewardItem` | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`) | ## Method mapping This table covers the main methods and their GMA Next-Gen SDK equivalents. | Feature | Old SDK Method Signature | GMA Next-Gen SDK Method Signature | |:--------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Core** | | | | MobileAds Initialization | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)` | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)` | | InitializationConfig Builder | N/A | `InitializationConfig.Builder(String applicationId)` | | Ad Request Builder | `AdRequest.Builder().build()` | `AdRequest.Builder(String adUnitId).build()` (for App Open, Interstitial, Rewarded, Rewarded Interstitial) **Banner:** `BannerAdRequest.Builder(String adUnitId, AdSize adSize).build()` **Native:** `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>).build()` | | **Formats** | | | | App Open | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)` | `AppOpenAd.load(AdRequest request, AdLoadCallback<AppOpenAd> loadCallback)` | | Banner | `AdView.loadAd(AdRequest request)` | `AdView.loadAd(BannerAdRequest request, AdLoadCallback<BannerAd> loadCallback)` | | Interstitial | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)` | `InterstitialAd.load(AdRequest request, AdLoadCallback<InterstitialAd> loadCallback)` | | Rewarded | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)` | `RewardedAd.load(AdRequest request, AdLoadCallback<RewardedAd> loadCallback)` | | Rewarded Interstitial | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)` | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback<RewardedInterstitialAd> loadCallback)` | | Native | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(...).build().loadAd(AdRequest request)` | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)` | | Native Ad Register | `NativeAdView.setNativeAd(NativeAd nativeAd)` | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)` | | **Callbacks** | | | | onFailedToShowFullScreenContent | `onAdFailedToShowFullScreenContent(adError: AdError)` | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)` | | onAdLoaded | **AdLoadCallback**: `onAdLoaded(ad: T)` (e.g., `InterstitialAdLoadCallback`, `RewardedAdLoadCallback`, `RewardedInterstitialAdLoadCallback`) | Parameter name is always `ad` **Format specific**: `onAdLoaded(ad: InterstitialAd)`, `onAdLoaded(ad: RewardedAd)`, `onAdLoaded(ad: RewardedInterstitialAd)` | | onAdFailedToLoad | `onAdFailedToLoad(loadAdError: LoadAdError)` | `onAdFailedToLoad(adError: LoadAdError)` |
Gemini را در حالت عامل فعال کنید
پس از پیکربندی فایل AGENTS.md ، میتوانید Gemini را در اندروید استودیو در حالت Agent Mode اجرا کنید.
در حالت عامل، میتوانید از نمونههای زیر برای دریافت پیام استفاده کنید:
Migrate my app to GMA Next-Gen SDK
بازخورد بگذارید
ما همچنان به ارزیابی و بهینهسازی زمینه ارائه شده به ابزارهای کمکی کد هوش مصنوعی ادامه میدهیم تا پاسخهای آنها را در مورد مباحث GMA Next-Gen SDK بهبود بخشیم.
اگر در مورد بهینهسازی Gemini برای GMA Next-Gen SDK بازخوردی دارید، به کانال Discord GMA Next-Gen SDK بپیوندید.