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

从Eclipse迁移至Android Studio后添加Google插屏广告遇冲突报错求助

解决Android Studio中添加Google插屏广告时的Support库重复依赖问题

嘿,这个问题我之前帮好几个从Eclipse迁移到Android Studio的开发者解决过——本质就是Android Support v4库被重复引入导致的冲突:你添加的play-services-ads本身已经包含了适配的Support库,而你的项目里其他依赖(比如Rajawali、aFileChooser子模块,或者libs目录下的jar包)大概率也自带了v4库,打包时就会出现类重复的编译错误。咱们一步步来搞定它:

第一步:排查并移除手动引入的重复Support库

  • 先检查项目根目录下的app/libs文件夹,看看有没有android-support-v4.jar这类文件,如果有直接删除
  • 打开依赖的子项目(Rajawali、aFileChooser)的build.gradle文件,看它们是不是单独引入了support-v4依赖,如果有的话,要么删除这些子项目里的v4依赖,要么给它们配置依赖主模块的统一Support库

第二步:优化主模块的Gradle依赖配置

修改你的app模块dependencies块,给play-services-ads添加排除规则,避免重复引入Support库,同时统一匹配你compileSdk版本的Support库版本(你用的是27,所以要对应27.x.x的Support库):

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':Rajawali')
    compile project(':aFileChooser')
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0'
    // 排除play-services-ads中自带的Support库,避免冲突
    compile ('com.google.android.gms:play-services-ads:11.0.4') {
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'support-annotations'
    }
    // 统一引入与compileSdk匹配的support-v4库
    compile 'com.android.support:support-v4:27.1.1'
    compile 'com.android.support:multidex:1.0.1'
}

第三步:完善Multidex配置(确保生效)

因为你已经引入了Multidex依赖,还要确保它在项目中生效:

  • 如果没有自定义Application类,直接在AndroidManifest.xml的<application>标签里指定:
<application
    android:name="android.support.multidex.MultiDexApplication"
    ...>
    ...
</application>
  • 如果有自定义Application类,在类中添加以下代码:
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

第四步:清理并重新构建项目

点击Android Studio顶部菜单栏的:

  • Build -> Clean Project
  • 然后Build -> Rebuild Project

额外:插屏广告的基础实现步骤(依赖问题解决后)

  1. 在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. 在目标Activity中初始化并展示插屏广告:
private InterstitialAd mInterstitialAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout);

    // 初始化插屏广告
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("你的AdMob插屏广告ID"); // 替换成你自己的ID

    // 请求加载广告
    AdRequest adRequest = new AdRequest.Builder().build();
    mInterstitialAd.loadAd(adRequest);

    // 设置广告加载完成监听,在合适时机展示(比如用户点击按钮后)
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            }
        }
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:51:52