使用Eclipse的Libgdx项目如何集成Admob?(不迁移至Android Studio)
在Eclipse的LibGDX项目中集成AdMob(适配SDK 27.0.3)
我之前也在Eclipse里折腾过LibGDX集成AdMob,给你一步步说清楚适配你当前环境的操作:
一、配置AndroidManifest.xml
打开项目里的android模块,找到AndroidManifest.xml做以下修改:
- 添加必要权限(放在
<manifest>标签内、<application>标签外):
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 配置AdMob应用ID(放在
<application>标签内):
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="你的AdMob应用ID" />
提示:这个ID是你在AdMob后台创建应用时获取的,格式为
ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy
- 可选:添加插屏广告所需的AdActivity(兼容旧版本SDK,保险起见可以加上):
<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" />
二、添加Google Play服务广告依赖
你已经安装了Extras里的Google Play服务,在Eclipse里可以这样操作:
- 导入Google Play服务库:打开
File > Import > Android > Existing Android Code Into Workspace,找到你SDK目录下的extras/google/google_play_services/libproject/google-play-services_lib,导入这个库项目。 - 关联到Android模块:右键你的LibGDX项目的
android模块,选择Properties > Android,在Library区域点击Add,选中刚才导入的google-play-services_lib确认添加。
如果你用Gradle构建项目,也可以直接修改
android模块的build.gradle,在dependencies块中添加:compile 'com.google.android.gms:play-services-ads:12.0.1'这个版本和SDK 27.0.3完全兼容,别用太高版本避免冲突。
三、编写跨平台广告交互逻辑
LibGDX是跨平台框架,我们需要在Android端实现广告功能,再通过接口让Core模块调用:
- 在Core模块创建广告接口
AdsController.java:
public interface AdsController { void showBannerAd(); void hideBannerAd(); void showInterstitialAd(); boolean isInterstitialAdLoaded(); }
- 在Android模块的
AndroidLauncher.java实现该接口并初始化广告:
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; import android.widget.RelativeLayout; import android.view.View; public class AndroidLauncher extends AndroidApplication implements AdsController { private AdView bannerAd; private InterstitialAd interstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); // 初始化Banner广告 bannerAd = new AdView(this); bannerAd.setAdSize(AdSize.SMART_BANNER); bannerAd.setAdUnitId("你的Banner广告单元ID"); // 初始化插屏广告 interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId("你的插屏广告单元ID"); loadInterstitialAd(); // 将广告控制器传递给游戏核心类 initialize(new MyGame(this), config); // 将Banner添加到布局 RelativeLayout layout = new RelativeLayout(this); View gameView = getView(); layout.addView(gameView); RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); adParams.addRule(RelativeLayout.CENTER_HORIZONTAL); layout.addView(bannerAd, adParams); setContentView(layout); } private void loadInterstitialAd() { AdRequest adRequest = new AdRequest.Builder().build(); interstitialAd.loadAd(adRequest); } @Override public void showBannerAd() { runOnUiThread(() -> { AdRequest adRequest = new AdRequest.Builder().build(); bannerAd.loadAd(adRequest); }); } @Override public void hideBannerAd() { runOnUiThread(() -> bannerAd.setVisibility(View.GONE)); } @Override public void showInterstitialAd() { runOnUiThread(() -> { if (interstitialAd.isLoaded()) { interstitialAd.show(); // 展示后重新加载下一条插屏 loadInterstitialAd(); } }); } @Override public boolean isInterstitialAdLoaded() { return interstitialAd.isLoaded(); } }
- 在Core模块的游戏主类
MyGame.java中调用广告接口:
public class MyGame extends Game { private AdsController adsController; public MyGame(AdsController adsController) { this.adsController = adsController; } @Override public void create() { // 游戏启动时显示Banner广告 adsController.showBannerAd(); // 示例:关卡结束后显示插屏广告 if (adsController.isInterstitialAdLoaded()) { adsController.showInterstitialAd(); } } }
四、ProGuard混淆配置(如果启用)
如果项目开启了ProGuard,需要在proguard-rules.pro中添加以下规则,避免广告代码被混淆:
-keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.**
最后提醒
测试时一定要用AdMob官方测试广告单元ID,比如Banner用ca-app-pub-3940256099942544/6300978111,插屏用ca-app-pub-3940256099942544/1033173712,不要用正式ID测试,否则会被AdMob限流。
内容的提问来源于stack exchange,提问作者Hasib Ahmed
相关产品推荐
相关产品推荐

