Bermigrasi dengan alat AI (beta)

Untuk mengoptimalkan migrasi dari Google Mobile Ads SDK ke GMA Next-Gen SDK dengan Gemini di Android Studio, gunakan file AGENTS.md di project Anda. Dengan menambahkan file AGENTS.md ke project, Anda memberikan konteks khusus untuk GMA Next-Gen SDK kepada Gemini dan meningkatkan kualitas output pembuatan kode yang dibantu AI. Untuk mengetahui detailnya, lihat Menyesuaikan Gemini menggunakan file AGENTS.md.

Panduan ini membahas cara mengoptimalkan Gemini di Android Studio untuk membantu migrasi dari Google Mobile Ads SDK ke GMA Next-Gen SDK.

Sebelum memulai

Sebelum Anda melanjutkan, lakukan hal berikut:

Menambahkan file AGENTS.md ke project Anda

Google menyediakan file AGENTS.md dengan petunjuk bagi Gemini untuk membantu Anda melakukan langkah-langkah migrasi.

Untuk menggunakan petunjuk khusus GMA Next-Gen SDK di bantuan kode AI, ikuti langkah-langkah berikut:

  1. Buat file baru bernama AGENTS.md di mana saja dalam sistem file project Anda.

  2. Dalam file AGENTS.md, tambahkan petunjuk berikut:

# 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)`                                                                                                                                                                                                                                                   |

Memberi perintah Gemini dalam Mode Agen

Setelah mengonfigurasi file AGENTS.md, Anda dapat meminta Gemini di Android Studio dalam Mode Agen.

Dalam Mode Agen, Anda dapat menggunakan contoh perintah berikut:

Migrate my app to GMA Next-Gen SDK

Berikan masukan

Kami terus mengevaluasi dan mengoptimalkan konteks yang diberikan ke alat bantu penulisan kode AI untuk meningkatkan kualitas responsnya terkait topik GMA Next-Gen SDK.

Jika Anda memiliki masukan tentang pengoptimalan Gemini untuk GMA Next-Gen SDK, bergabunglah dengan saluran Discord GMA Next-Gen SDK.