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

AdMob测试横幅广告无法加载问题求助

AdMob横幅广告无法加载的问题解决

我正在练习加载AdMob横幅广告,但广告无法显示。已确认build.gradle(:app)、build.gradle(:project)及Manifest文件均配置完成,Manifest中已填写AdMob后台创建的APP ID,应用运行无报错但广告不显示,Logcat出现相关错误日志。


相关代码

XML布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111" />

</LinearLayout>

注:使用了AdMob官方提供的测试横幅广告单元ID

MainActivity.java代码

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.RequestConfiguration;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import java.util.Arrays;
import java.util.List;
import static com.google.android.gms.ads.MobileAds.initialize;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(@NonNull @org.jetbrains.annotations.NotNull InitializationStatus initializationStatus) {

            }
        });
        
        /*
        List<String> testDeviceIds = Arrays.asList("")
        RequestConfiguration configuration = new RequestConfiguration.Builder().setTestDeviceIds(testDeviceIds).build();
        MobileAds.setRequestConfiguration(configuration);*/
        
        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder()
                .build();
        mAdView.loadAd(adRequest);
    }
}

注:注释部分为尝试的解决方案,但未收到获取测试设备ID的日志提示,无法填写设备ID


Logcat日志

I/Ads: Ad failed to load : 0
E/DynamiteModule: Failed to load IDynamiteLoader from GmsCore: Application package com.google.android.gms not found

解决方案

  1. 修复Google Play Services缺失问题
    日志中的com.google.android.gms not found是核心问题,说明设备上没有安装或未正确更新Google Play服务:

    • 模拟器:必须使用带Google Play标识的系统镜像创建模拟器,启动后更新Google Play服务到最新版本。
    • 真机:打开Google Play商店,搜索并更新Google Play服务,确保版本与项目依赖的play-services-ads版本兼容。
  2. 延迟广告加载到初始化完成后
    当前代码中loadAd在初始化异步操作未完成时就执行,可能导致SDK未就绪。修改代码,将广告加载逻辑移到初始化回调内:

    MobileAds.initialize(this, new OnInitializationCompleteListener() {
        @Override
        public void onInitializationComplete(@NonNull InitializationStatus initializationStatus) {
            mAdView = findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder().build();
            mAdView.loadAd(adRequest);
        }
    });
    
  3. 获取并配置测试设备ID
    Google Play服务正常后,运行应用,Logcat会输出类似Use AdRequest.Builder.addTestDevice("DEVICE_ID") to get test ads on this device.的日志,复制该ID启用测试设备配置(代码放在MobileAds.initialize之前):

    List<String> testDeviceIds = Arrays.asList("你的测试设备ID");
    RequestConfiguration configuration = new RequestConfiguration.Builder().setTestDeviceIds(testDeviceIds).build();
    MobileAds.setRequestConfiguration(configuration);
    
  4. 修正布局无效属性
    XML中AdView的android:layout_alignParentBottom="true"属于RelativeLayout属性,在LinearLayout中无效。若要固定广告在底部,可通过权重调整布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        ...
        android:orientation="vertical">
    
        <TextView
            ...
            android:layout_weight="1"/> <!-- 让文本区域占满剩余空间,广告固定在底部 -->
    
        <com.google.android.gms.ads.AdView
            .../>
    
    </LinearLayout>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:25:52