升级com.google.android.gms:play-services-ads至20.0.0遇Targeting S+错误
解决play-services-ads 20.0.0升级后Targeting S+(API31+)错误
核心原因
play-services-ads从20.0.0版本开始强制要求适配Android 12(API31)及以上的系统行为变更,旧的targetSdkVersion和依赖配置跟不上就会触发报错。
具体解决方案
升级targetSdkVersion到31+
打开app模块的build.gradle,修改defaultConfig里的targetSdkVersion:android { defaultConfig { targetSdkVersion 31 // 建议直接升到当前最新稳定API版本,比如34 } }补上API31+必须的权限和配置
- 添加通知权限到AndroidManifest.xml:
注意这个权限是危险权限,需要在代码里动态申请(用户打开APP或触发广告前申请)。<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> - 给广告相关的前台服务声明类型(如果SDK用到):
在Manifest里添加AdService的配置:<service android:name="com.google.android.gms.ads.AdService" android:foregroundServiceType="dataSync|mediaPlayback" android:exported="false"/> - 检查代码里的PendingIntent创建:API31+要求必须指定
FLAG_IMMUTABLE或FLAG_MUTABLE,比如:val pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE )
- 添加通知权限到AndroidManifest.xml:
升级Gradle插件(你的4.2.2版本太老,对API31支持不足)
- 根目录
build.gradle里升级插件版本:dependencies { classpath 'com.android.tools.build:gradle:7.0.4' // 选和你Kotlin版本兼容的,1.6.10对应7.0.x以上都可以 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" } - 修改
gradle-wrapper.properties里的Gradle版本,和插件对应:distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
- 根目录
排查依赖冲突
用命令查看依赖树,找出还在使用旧targetSdk的依赖:./gradlew app:dependencies把这些依赖升级到适配API31+的版本,避免混合导致的兼容性问题。
最后清理重建
执行Clean Project再Rebuild Project,或者用命令:./gradlew clean build
内容的提问来源于stack exchange,提问作者sahanSenvar
相关产品推荐
相关产品推荐

