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

2018年如何在LibGdx项目中接入AdMob?解决Google Play Services异常

嘿,我当年在2018年做LibGdx项目接入AdMob的时候也踩过Google Play Services配置的坑,各种依赖冲突、运行崩溃的问题都遇到过,给你一步步梳理怎么无异常添加服务,再顺利接入AdMob:

第一步:正确配置Google Play Services(避免异常)

LibGdx是跨平台框架,所有和Android相关的配置都在android模块里操作,核心要注意依赖版本匹配和必要配置:

  • 先准备好SDK依赖:打开Android SDK Manager,确保已经下载了Google Play Services和Google Repository(2018年的版本不用太新,和你的gradle插件版本匹配就行,比如gradle插件3.0.1对应play services 15.x系列)
  • 配置Android模块的build.gradle:
    • 在根目录build.gradle的dependencies里,确保gradle插件版本是2018年稳定版:
      dependencies {
          classpath 'com.android.tools.build:gradle:3.0.1'
          // 其他依赖...
      }
      
    • 在android模块的build.gradle的dependencies里添加AdMob的Play Services依赖,推荐用2018年最稳定的15.0.1版本:
      dependencies {
          implementation 'com.google.android.gms:play-services-ads:15.0.1'
          // 如果方法数超过65k,还要加multidex依赖:
          implementation 'com.android.support:multidex:1.0.3'
          // 其他LibGdx依赖...
      }
      
    • 如果开启multidex,在android模块build.gradle的defaultConfig里添加:
      defaultConfig {
          multiDexEnabled true
          // 其他配置...
      }
      
  • 配置AndroidManifest.xml:
    • 在<manifest>标签下添加权限:
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
    • 在<application>标签下添加Play Services版本元数据:
      <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
      

常见异常解决

  • 如果遇到Failed to resolve: com.google.android.gms:play-services-ads:x.x.x:检查是否下载了Google Repository,或者依赖版本和gradle插件不兼容,换成15.0.1试试
  • 如果运行时出现ClassNotFoundException或方法数溢出:开启multidex并添加对应依赖,同步gradle后清理项目重新构建
  • 如果出现Google Play Services版本不兼容:确保设备上的Google Play Services版本和你依赖的版本差距不大,或者用Google官方的AVD模拟器测试
第二步:LibGdx中接入AdMob(2018年实现方式)

LibGdx的core模块不能直接调用Android API,所以用接口+平台实现的方式隔离平台代码:

  1. Core模块定义广告接口:创建AdMobController.java
public interface AdMobController {
    void showBannerAd();
    void hideBannerAd();
    void showInterstitialAd();
}
  1. Android模块实现接口:创建AndroidAdMobController.java
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;

public class AndroidAdMobController implements AdMobController {
    private AndroidApplication app;
    private AdView bannerAd;
    private InterstitialAd interstitialAd;
    // 2018年AdMob测试ID,正式环境换成你的ID
    private final String BANNER_TEST_ID = "ca-app-pub-3940256099942544/6300978111";
    private final String INTERSTITIAL_TEST_ID = "ca-app-pub-3940256099942544/1033173712";

    public AndroidAdMobController(AndroidApplication app) {
        this.app = app;
        initBanner();
        initInterstitial();
    }

    private void initBanner() {
        bannerAd = new AdView(app);
        bannerAd.setAdSize(AdSize.SMART_BANNER);
        bannerAd.setAdUnitId(BANNER_TEST_ID);
        // 将Banner添加到Android布局
        app.getView().addView(bannerAd);
        // 请求广告
        AdRequest adRequest = new AdRequest.Builder().build();
        bannerAd.loadAd(adRequest);
    }

    private void initInterstitial() {
        interstitialAd = new InterstitialAd(app);
        interstitialAd.setAdUnitId(INTERSTITIAL_TEST_ID);
        AdRequest adRequest = new AdRequest.Builder().build();
        interstitialAd.loadAd(adRequest);
    }

    @Override
    public void showBannerAd() {
        // 必须在UI线程操作Android控件
        app.runOnUiThread(() -> bannerAd.setVisibility(AdView.VISIBLE));
    }

    @Override
    public void hideBannerAd() {
        app.runOnUiThread(() -> bannerAd.setVisibility(AdView.GONE));
    }

    @Override
    public void showInterstitialAd() {
        app.runOnUiThread(() -> {
            if (interstitialAd.isLoaded()) {
                interstitialAd.show();
                // 展示后重新加载下一个插屏
                interstitialAd.loadAd(new AdRequest.Builder().build());
            }
        });
    }
}
  1. 在AndroidLauncher中传入控制器
public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        AdMobController adMobController = new AndroidAdMobController(this);
        // 把控制器传给你的Game类,需要Game类有对应的构造方法
        initialize(new MyGame(adMobController), config);
    }
}
  1. Core模块调用广告方法
public class MyGame extends Game {
    private AdMobController adMobController;

    public MyGame(AdMobController adMobController) {
        this.adMobController = adMobController;
    }

    @Override
    public void create() {
        // 游戏启动时展示Banner
        adMobController.showBannerAd();
        // 比如关卡结束时展示插屏
        // adMobController.showInterstitialAd();
    }
}

额外注意事项

  • 测试阶段一定要用AdMob提供的测试ID,用正式ID测试会被AdMob限流甚至封号
  • 确保测试设备/模拟器安装了Google Play Services,2018年部分国产设备没有预装,需要手动安装
  • 如果广告加载失败,查看Logcat的错误信息,常见原因是网络问题、ID错误、Play Services版本不匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:59