You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级targetSdkVersion至31后主界面AdMob banner广告无法加载如何解决

问题关联判定

你遇到的banner1曝光量骤降问题和Android Studio抛出的权限报错直接相关。升级到targetSdkVersion 31(对应Android 12系统)后,系统权限检查逻辑、AdMob SDK的适配规则都发生了变化,你看到的lint报错不是单纯的误报,对应的底层兼容性问题会导致运行在Android 12及以上设备上的banner1广告请求被拦截,无法正常加载,最终表现为曝光量暴跌。而banner2能正常加载是因为ListActivity的启动时机、上下文环境和MainActivity存在差异,仅部分低版本系统设备不受该问题影响,贡献了你看到的少量banner1曝光。

报错修复方案

按以下步骤逐一排查修复即可:

1. 修正Manifest权限配置

  • 确认android.permission.INTERNET权限声明在<manifest>根标签下,不要嵌套在<application>等其他标签内部,targetSdk 31后权限声明位置错误会直接被系统忽略。
  • 新增AD_ID权限声明(targetSdk 31+的强制要求,AdMob 20.4.0及以上版本必须配置才能正常拉取广告):
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

2. 升级AdMob SDK到适配版本

你当前使用的AdMob SDK版本未适配Android 12,是导致权限识别错误的核心原因之一。将play-services-ads依赖升级到20.6.0及以上的正式版本,该版本开始完整支持targetSdkVersion 31,修复了旧版本在高版本系统上的兼容性问题。

3. 修复lint报错与广告加载顺序

Android Studio对targetSdk 31下的AdMob loadAd方法存在lint检查误判,你可以通过添加忽略注解解决报错,同时修正广告加载的执行顺序(先设置AdListener再调用loadAd,避免回调丢失),修改后的代码如下:

MobileAds.initialize(this, new OnInitializationCompleteListener() {
        @Override
        public void onInitializationComplete(InitializationStatus initializationStatus) {
        }
    });

    AdRequest adRequest = new AdRequest.Builder().build();
    // 先设置监听器再加载广告
    mAdView.setAdListener(new AdListener(){

        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    loadingAdAlert.setVisibility(View.GONE);
                    mAdView.setVisibility(View.VISIBLE);
                }
            }, 1500);
        }

        @Override
        public void onAdFailedToLoad(LoadAdError loadAdError) {
            super.onAdFailedToLoad(loadAdError);
            // 建议此处添加日志打印loadAdError的错误码与信息,方便后续排查异常
            loadingAdAlert.setVisibility(View.GONE);
        }
    });
    // 添加lint忽略注解解决权限报错提示
    @SuppressLint("MissingPermission")
    mAdView.loadAd(adRequest);

4. 验证MainActivity初始化逻辑

确认MainActivity启动时MobileAds.initialize方法正常触发,没有因为升级targetSdk 31后新增的组件启动拦截规则、生命周期变化导致初始化未完成就调用广告加载逻辑。


内容的提问来源于stack exchange,提问作者JP711

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:15:04