手动下载 MAX 的广告平台

要接收版本更新,请订阅 AppLovin-MAX-SDK-Android GitHub 库

下载最新 Android SDK

向项目添加 SDK

解压缩下载的文件,然后将 aar 文件拖拽至项目中的 libs 文件夹。 如果您的项目没有 libs 文件夹,请在 app 文件夹中创建。

Gradle

将下列行添加至您的 build.gradle 文件:

repositories {
  google()
  mavenCentral()
  flatDir {
    dirs 'libs'
  }
  ⋮
}
dependencies {
  implementation 'com.applovin:applovin-sdk:«x.y.z»@aar'
  ⋮
}

添加 SDK Key

将下列行添加至您的 AndroidManifest.xml 文件,并将它放置在 application 标签中:

<meta-data android:name="applovin.sdk.key" android:value="«your-SDK-key»"/>

您可以在 AppLovin 控制面板的 Account > General > Keys 部分找到 SDK Key。

启用 Ad Review

要启用 MAX Ad Review 服务,请将下列行添加至您的 build.gradle 文件:

针对根层级 build.gradle 文件的补充行

buildscript {
  repositories {
    maven { url 'https://artifacts.applovin.com/android' }
  }
  dependencies {
    classpath "com.applovin.quality:AppLovinQualityServiceGradlePlugin:+"
  }
}

针对应用层级 build.gradle 文件的补充行

apply plugin: 'applovin-quality-service'
applovin {
    apiKey "«your-ad-review-key»"
}

您可以在 AppLovin 控制面板的 Account > General > Keys 部分找到 Ad Review Key。

初始化 SDK

创建 SDK 初始化配置

Before you initialize the SDK, create an initialization configuration object for the SDK. This object allows you to configure the properties that the SDK will initialize with. These initialization properties are immutable, except AppLovinSdkSettings which contains mutable properties that can change during the lifetime of the app.

// Create the initialization configuration
AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( "«SDK-key»" )
                 .setMediationProvider( AppLovinMediationProvider.MAX )
// Perform any additional configuration/setting changes
                 .build();

您可以在 AppLovin 控制面板的 Account > General > Keys 部分找到 SDK Key。

初始化 SDK

请尽早使用初始化配置对象来初始化 AppLovin SDK,例如在启动活动或应用程序类的 onCreate() 中。这样可为 SDK 提供更多广告缓存时间,从而改善用户体验。

public class MainActivity extends Activity
{
  protected void onCreate(Bundle savedInstanceState)
  {
    // Create the initialization configuration
    AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( "«SDK-key»" )
                     .setMediationProvider( AppLovinMediationProvider.MAX )
                     .build();

    // Initialize the SDK with the configuration
    AppLovinSdk.getInstance( this ).initialize( initConfig, new AppLovinSdk.SdkInitializationListener()
    {
      @Override
      public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig)
      {
        // Start loading ads
      }
    } );
  }
}

示例

下方展示了集成示例。

// Create the initialization configuration
AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( "«SDK-key»" )
    .setMediationProvider( AppLovinMediationProvider.MAX )
    .setSegmentCollection( MaxSegmentCollection.builder()
                             .addSegment( new MaxSegment( 849, Arrays.asList( 1, 3 ) ) )
                             .build() )
    .build();

// Configure the SDK settings if needed before or after SDK initialization.
val settings = AppLovinSdk.getInstance( this ).getSettings();
settings.setUserIdentifier( "«user-ID»" );
settings.setExtraParameter( "uid2_token", "«token-value»" );
settings.getTermsAndPrivacyPolicyFlowSettings().setEnabled( true );
settings.getTermsAndPrivacyPolicyFlowSettings().setPrivacyPolicyUri( Uri.parse( "«https://your-company-name.com/privacy-policy»" ) );
settings.getTermsAndPrivacyPolicyFlowSettings().setTermsOfServiceUri( Uri.parse( "«https://your-company-name.com/terms-of-service»" ) );

// Initialize the SDK with the configuration
AppLovinSdk.getInstance( this ).initialize( initConfig, new AppLovinSdk.SdkInitializationListener()
{
  @Override
  public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig)
  {
    // Start loading ads
  }
} );

插屏广告

加载插屏广告

要加载插屏广告,请使用您的广告单元创建一个 MaxInterstitialAd 对象,并调用 loadAd()。实现 MaxAdListener,以便在广告准备就绪以及发生其他广告相关事件时收到通知。

public class ExampleActivity extends Activity
        implements MaxAdListener
{
  private MaxInterstitialAd interstitialAd;
  private int retryAttempt;

  void createInterstitialAd()
  {
    interstitialAd = new MaxInterstitialAd( "«ad-unit-ID»" );
    interstitialAd.setListener( this );

    // Load the first ad
    interstitialAd.loadAd();
  }

  // MAX Ad Listener
  @Override
  public void onAdLoaded(final MaxAd maxAd)
  {
    // Interstitial ad is ready to be shown. interstitialAd.isReady() will now return 'true'

    // Reset retry attempt
    retryAttempt = 0;
  }

  @Override
  public void onAdLoadFailed(final String adUnitId, final MaxError error)
  {
    // Interstitial ad failed to load
    // AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)

    retryAttempt++;
    long delayMillis = TimeUnit.SECONDS.toMillis( (long) Math.pow( 2, Math.min( 6, retryAttempt ) ) );

    new Handler().postDelayed( new Runnable()
    {
      @Override
      public void run()
      {
        interstitialAd.loadAd();
      }
    }, delayMillis );
  }

  @Override
  public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error)
  {
    // Interstitial ad failed to display. AppLovin recommends that you load the next ad
    interstitialAd.loadAd();
  }

  @Override
  public void onAdDisplayed(final MaxAd maxAd) {}

  @Override
  public void onAdClicked(final MaxAd maxAd) {}

  @Override
  public void onAdHidden(final MaxAd maxAd)
  {
    // Interstitial ad is hidden. Pre-load the next ad
    interstitialAd.loadAd();
  }
}

显示插屏广告

要展示插屏广告,请在刚才创建的 MaxInterstitialAd 实例对象上调用 showAd()

if ( interstitialAd.isReady() )
{
  interstitialAd.showAd();
}

激励广告

加载激励广告

要加载激励广告,请使用您的激励广告单元调取一个 MaxRewardedAd 对象,并对其调用 loadAd()。 安装 MaxRewardedAdListener,以便在广告准备就绪以及发生其他广告相关事件时收到通知。

public class ExampleActivity extends Activity
        implements MaxRewardedAdListener
{
  private MaxRewardedAd rewardedAd;
  private int           retryAttempt;

  void createRewardedAd()
  {
    rewardedAd = MaxRewardedAd.getInstance( "«ad-unit-ID»" );
    rewardedAd.setListener( this );

    rewardedAd.loadAd();
  }

  // MAX Ad Listener
  @Override
  public void onAdLoaded(final MaxAd maxAd)
  {
    // Rewarded ad is ready to be shown. rewardedAd.isReady() will now return 'true'

    // Reset retry attempt
    retryAttempt = 0;
  }

  @Override
  public void onAdLoadFailed(final String adUnitId, final int errorCode)
  {
    // Rewarded ad failed to load
    // AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)

    retryAttempt++;
    long delayMillis = TimeUnit.SECONDS.toMillis( (long) Math.pow( 2, Math.min( 6, retryAttempt ) ) );

    new Handler().postDelayed( new Runnable()
    {
      @Override
      public void run()
      {
        rewardedAd.loadAd();
      }
    }, delayMillis );
  }

  @Override
  public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error)
  {
    // Rewarded ad failed to display. AppLovin recommends that you load the next ad
    rewardedAd.loadAd();
  }

  @Override
  public void onAdDisplayed(final MaxAd maxAd) {}

  @Override
  public void onAdClicked(final MaxAd maxAd) {}

  @Override
  public void onAdHidden(final MaxAd maxAd)
  {
    // rewarded ad is hidden. Pre-load the next ad
    rewardedAd.loadAd();
  }

  @Override
  public void onUserRewarded(final MaxAd maxAd, final MaxReward maxReward)
  {
    // Rewarded ad was displayed and user should receive the reward
  }
}

显示激励广告

要展示激励广告,请在刚才创建的 MaxRewardedAd 实例对象上调用 showAd()

if ( rewardedAd.isReady() )
{
  rewardedAd.showAd();
}

要了解如何通过货币服务器接收回传,请参阅 MAX S2S Rewarded Callback API 指南,并在 Edit Ad Unit 页面更新 S2S Rewarded Callback URL。

横幅和 MREC

通过程式化方法加载和展示横幅和 MREC

要加载横幅广告或 MREC,请使用您的广告单元创建一个 MaxAdView 对象,并调用 loadAd()。要展示广告,请将 MaxAdView 对象添加为视图层级的子视图。实现 MaxAdViewAdListener,以便在广告准备就绪以及发生其他广告相关事件时收到通知。

public class ExampleActivity extends Activity
        implements MaxAdViewAdListener
{
  private MaxAdView adView;

  void createBannerAd()
  {
    adView = new MaxAdView( "«ad-unit-ID»" );
    adView.setListener( this );

    // Stretch to the width of the screen for banners to be fully functional
    int width = ViewGroup.LayoutParams.MATCH_PARENT;

    // Banner height on phones and tablets is 50 and 90, respectively
    int heightPx = getResources().getDimensionPixelSize( R.dimen.banner_height );

    adView.setLayoutParams( new FrameLayout.LayoutParams( width, heightPx ) );

    // Set background or background color for banners to be fully functional
    adView.setBackgroundColor( ... );

    ViewGroup rootView = findViewById( android.R.id.content );
    rootView.addView( adView );

    // Load the ad
    adView.loadAd();
  }

  // MAX Ad Listener
  @Override
  public void onAdLoaded(final MaxAd maxAd) {}

  @Override
  public void onAdLoadFailed(final String adUnitId, final int errorCode) {}

  @Override
  public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error) {}

  @Override
  public void onAdClicked(final MaxAd maxAd) {}

  @Override
  public void onAdExpanded(final MaxAd maxAd) {}

  @Override
  public void onAdCollapsed(final MaxAd maxAd) {}

  @Override
  public void onAdDisplayed(final MaxAd maxAd) { /* use this for impression tracking */ }

  @Override
  public void onAdHidden(final MaxAd maxAd) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
}

在 Layout Editor 中加载和展示横幅或 MREC

You can also add MAX banners or MRECs to your view layout XML. Ensure that your ads are fully functional by setting a background or background color (android:background). For banners, stretch the width (android:layout_width) to the width of the screen. For MRECs, set the android:adFormat accordingly:

<com.applovin.mediation.ads.MaxAdView
  xmlns:maxads="http://schemas.applovin.com/android/1.0"
  maxads:adUnitId="«ad-unit-ID»"
  android:background="@color/banner_background_color"
  android:layout_width="match_parent"
  android:layout_height="@dimen/banner_height" />

Declare the base banner height of 50 dp in res/values/attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="banner_height">50dp</dimen>
</resources>

Declare the tablet banner height of 90 dp in res/values-sw600dp/attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="banner_height">90dp</dimen>
</resources>

要隐藏横幅或 MREC 广告,请进行如下调用:

adView.setVisibility( View.GONE );
adView.stopAutoRefresh();

要显示横幅或 MREC 广告,请进行以下调用:

adView.setVisibility( View.VISIBLE );
adView.startAutoRefresh();

选择要集成的广告平台

选择要集成的广告平台, 然后按照具体说明操作。

  • Amazon
  • Google Ad Manager
  • Google Bidding and Google AdMob
  • Liftoff Monetize
  • Meta Audience Network
  • Mintegral
  • 迁移至 AndroidX

    将 AndroidX 库集成到您的项目中。 参阅 Migrate to AndroidX 指南,了解有关如何迁移项目的更多信息。

    使用 Google AdSense、AdManager 或 AdMob 的开发者和发行商必须使用经过 Google 认证的许可管理平台 (CMP)。 要向欧洲经济区 (EEA) 或英国的用户投放广告,您的 CMP 必须集成 IAB 的透明度和许可框架。 请参阅 Privacy: “TCF v2 Consent” 了解更多信息。

    添加您的 Google 竞价和 Google AdMob / Google Ad Manager 应用 ID

    在应用的 AndroidManifest.xml 中,在 <application> 标签内添加一个 <meta-data> 标签。 以下示例展示了此标签的正确属性。 请用您的 Google 竞价和 Google AdMob / Google Ad Manager 应用 ID 替换 «your-admob-app-id»

    <?xml version="1.0" encoding="utf-8"?>
    <manifest … >
      <application … >
        <meta-data
          android:name="com.google.android.gms.ads.APPLICATION_ID"
          android:value="«your-admob-app-id»"/>
        ⋮
      </application>
    </manifest>
    

    Gradle 错误

    Google AdMob 需要Android Gradle 插件 4.2.0 或更高版本,Gradle 6.7.1 或更高版本。 如果看到以下错误信息,请更新 Android Gradle 插件和 Gradle 版本:

    AAPT: error: unexpected element <property> found in <manifest><application>.
    

    compileSdkVersion

    Google 移动广告 SDK 23.1.0 及更新版本要求 compileSdkVersion 为 34 或更高。

    在应用的 build.gradle 中将 compileSdkVersion 设置为 34 或更高。

    请参阅 Google 移动广告 SDK 发行说明,了解最新的 compileSdkVersion 要求。

    初始化 Amazon SDK

    Amazon Publisher Services SDK 需要在 MAX SDK 之外进行初始化:

    // Amazon requires an 'Activity' instance
    AdRegistration.getInstance( "AMAZON_APP_ID", this );
    AdRegistration.setMRAIDSupportedVersions( new String[] { "1.0", "2.0", "3.0" } );
    AdRegistration.setMRAIDPolicy( MRAIDPolicy.CUSTOM );
    

    从 Amazon SDK 加载横幅或 MREC 广告

    要在 MAX 中集成 Amazon 广告,则必须先加载 Amazon 广告。 在加载 MAX 广告之前,将 DTBAdResponseAdError 传递至 MaxAdView 实例。 您可以通过调用 MaxAdView#setLocalExtraParameter() 来完成此操作。

    对于自动刷新横幅广告,只需加载广告一次。

    class ExampleActivity
            extends Activity
    {
      ⋮
    
      private void loadAd()
      {
        String amazonAdSlotId;
        MaxAdFormat adFormat;
    
        if ( AppLovinSdkUtils.isTablet( getApplicationContext() ) )
        {
          amazonAdSlotId = "«Amazon-leader-slot-ID»";
          adFormat = MaxAdFormat.LEADER;
        }
        else
        {
          amazonAdSlotId = "«Amazon-banner-slot-ID»";
          adFormat = MaxAdFormat.BANNER;
        }
    
        // Raw size will be 320x50 for BANNERs on phones, and 728x90 for LEADERs on tablets
        AppLovinSdkUtils.Size rawSize = adFormat.getSize();
        DTBAdSize size = new DTBAdSize( rawSize.getWidth(), rawSize.getHeight(), amazonAdSlotId );
    
        DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
        adLoader.setSizes( size );
        adLoader.loadAd( new DTBAdCallback()
        {
          @Override
          public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
          {
            // 'adView' is your instance of MaxAdView
            adView.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
            adView.loadAd();
          }
    
          @Override
          public void onFailure(@NonNull final AdError adError)
          {
            // 'adView' is your instance of MaxAdView
            adView.setLocalExtraParameter( "amazon_ad_error", adError );
            adView.loadAd();
          }
        } );
      }
    }
    

    从 Amazon SDK 加载插屏广告

    要集成 Amazon 插屏广告到 MAX,您必须先加载 Amazon 广告。 在加载 MAX 广告之前,将 DTBAdResponseAdError 传递至 MaxInterstitialAd 实例。您可以通过调用 MaxInterstitialAd#setLocalExtraParameter() 来完成此操作。

    在每个会话中,您只能加载一次 Amazon DTBAdResponseDTBAdErrorInfo 并将其发送到 MaxInterstitialAd 实例。

    class ExampleActivity
           extends Activity
    {
      private static MaxInterstitialAd interstitialAd; // static to ensure only one instance exists
      private static boolean           isFirstLoad = true;
    
      private void loadAd()
      {
        if ( isFirstLoad )
        {
          isFirstLoad = false;
    
          if ( interstitialAd == null )
          {
            interstitialAd = new MaxInterstitialAd( "«MAX-inter-ad-unit-ID»" );
          }
    
          DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
          adLoader.setSizes( new DTBAdSize.DTBInterstitialAdSize( "«Amazon-inter-slot-ID»" ) );
          adLoader.loadAd( new DTBAdCallback()
          {
            @Override
            public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
            {
              // 'interstitialAd' is your instance of MaxInterstitialAd
              interstitialAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
              interstitialAd.loadAd();
            }
    
            @Override
            public void onFailure(@NonNull final AdError adError)
            {
              // 'interstitialAd' is your instance of MaxInterstitialAd
              interstitialAd.setLocalExtraParameter( "amazon_ad_error", adError );
              interstitialAd.loadAd();
            }
          } );
        }
        else
        {
          interstitialAd.loadAd();
        }
      }
    }
    

    从 Amazon SDK 加载视频插屏广告

    要集成 Amazon 视频插屏广告到 MAX,您必须先加载 Amazon 广告。 在加载 MAX 广告之前,将 DTBAdResponseAdError 传递至 MaxInterstitialAd 实例。 您可以通过调用 MaxInterstitialAd#setLocalExtraParameter() 来完成此操作。

    在每个会话中,您只能加载一次 DTBAdResponseDTBAdErrorInfo 并将其发送到 MaxInterstitialAd 实例。

    class ExampleActivity
           extends Activity
    {
      private static MaxInterstitialAd interstitialAd; // static to ensure only one instance exists
      private static boolean           isFirstLoad = true;
    
      private void loadAd()
      {
        if ( isFirstLoad )
        {
          isFirstLoad = false;
    
          if ( interstitialAd == null )
          {
            interstitialAd = new MaxInterstitialAd( "«MAX-inter-ad-unit-ID»" );
          }
    
          DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
    
          // Switch video player width and height values(320, 480) depending on device orientation
          adLoader.setSizes( new DTBAdSize.DTBVideo(320, 480, "«Amazon-video-inter-slot-ID»") );
          adLoader.loadAd( new DTBAdCallback()
          {
            @Override
            public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
            {
              // 'interstitialAd' is your instance of MaxInterstitialAd
              interstitialAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
              interstitialAd.loadAd();
            }
    
            @Override
            public void onFailure(@NonNull final AdError adError)
            {
              // 'interstitialAd' is your instance of MaxInterstitialAd
              interstitialAd.setLocalExtraParameter( "amazon_ad_error", adError );
              interstitialAd.loadAd();
            }
          } );
        }
        else
        {
          interstitialAd.loadAd();
        }
      }
    }
    

    从 Amazon SDK 加载激励视频广告

    要在 MAX 中集成 Amazon 激励视频,请先加载 Amazon 广告。 在加载 MAX 广告之前,将 DTBAdResponseAdError 传递至 MaxRewardedAd 实例。您可以通过调用 MaxRewardedAd#setLocalExtraParameter() 来完成此操作。

    在每个会话中,您只能加载一次 DTBAdResponseAdError 并将其发送到 MaxRewardedAd 实例。

    class ExampleActivity
            extends Activity
    {
      private static MaxRewardedAd rewardedAd; // static to ensure only one instance exists
      private static boolean       isFirstLoad = true;
    
      private void loadAd()
      {
        if ( isFirstLoad )
        {
          isFirstLoad = false;
    
          if ( rewardedAd == null )
          {
            rewardedAd = MaxRewardedAd.getInstance( "«MAX-rewarded-ad-unit-ID»" );
          }
    
          DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
    
          // Switch video player width and height values(320, 480) depending on device orientation
          adLoader.setSizes( new DTBAdSize.DTBVideo( 320, 480, "«Amazon-video-rewarded-slot-ID»" ) );
          adLoader.loadAd( new DTBAdCallback()
          {
            @Override
            public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
            {
              // 'rewardedAd' is your instance of MaxRewardedAd
              rewardedAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
              rewardedAd.loadAd();
            }
    
            @Override
            public void onFailure(@NonNull final AdError adError)
            {
              // 'rewardedAd' is your instance of MaxRewardedAd
              rewardedAd.setLocalExtraParameter( "amazon_ad_error", adError );
              rewardedAd.loadAd();
            }
          } );
        }
        else
        {
          rewardedAd.loadAd();
        }
      }
    }
    

    测试 Amazon Publisher Services

    AppLovin 建议您为 Amazon SDK 启用测试模式, 以便接收测试广告。 通过进行以下调用来启用测试模式:

    AdRegistration.enableTesting( true );
    AdRegistration.enableLogging( true );
    

    您可以过滤瀑布流,使其只包含 Amazon 广告。 为此,请在Mediation Debugger中选择Select Live Network,然后选择 Amazon 平台。

    Meta Audience Network 数据处理选项

    如果您不想启用限制数据使用 (LDU) 模式,请向 SetDataProcessingOptions() 传递一个空字符串数组:

    import com.facebook.ads.AdSettings;
    ⋮
    AdSettings.setDataProcessingOptions( new String[] {} );
    ⋮
    // Initialize MAX SDK
    

    要为用户启用 LDU 并指定用户地理位置,请以如下形式调用 SetDataProcessingOptions()

    import com.facebook.ads.AdSettings;
    ⋮
    AdSettings.setDataProcessingOptions( new String[] {"LDU"}, «country», «state» );
    ⋮
    // Initialize MAX SDK
    

    使用 Google UMP

    如果您使用 Google UMP 作为 CMP,则可以判断用户是否已向 Meta 授予许可。 为此,请使用如下代码:

    Boolean hasMetaConsent = AppLovinPrivacySettings.getAdditionalConsentStatus( 89 );
    if ( hasMetaConsent != null )
    {
      // Set Meta Data Processing Options accordingly.
    }
    else
    {
      // AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
    }
    

    Meta Audience Network 加利福尼亚州用户的数据处理选项

    要了解如何在加利福尼亚州启用 Meta Audience Network 的 “Limited Data Use” (限制数据使用) 标记,请访问 Meta 开发者文档

    Android Manifest 合并错误

    一些平台 SDK 会在其打包的 Android Manifest 文件中使用 <queries> 元素。 如果使用的 Android Gradle 插件版本不兼容,则会导致以下编译错误之一:

    com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
    error: unexpected element <queries> found in <manifest>.
    

    要修复此错误,请升级至以下 Android Gradle 插件版本之一。 这些版本支持 <queries> 元素:

    请升级 Android Gradle 插件,而非 Gradle Build Tools。

    当前 Android Gradle 插件版本支持 <queries> 元素的版本
    4.1.*全部
    4.0.*4.0.1+
    3.6.*3.6.4+
    3.5.*3.5.4+
    3.4.*3.4.3+
    3.3.*3.3.3+

    手动下载 MAX 的广告平台

    加载中……

    这篇文章有帮助吗?
    这篇文章有帮助吗?
    search