Android 15中AdMob导致Material You动态颜色更新失效求助
问题:AdMob初始化导致Android 15上Material You动态颜色失效
一旦调用MobileAds.initialize(this),Material You的动态颜色更新功能就会失效。切换系统调色板后返回应用,颜色不会自动更新,必须重启应用才能生效;注释掉该初始化代码后,动态颜色功能恢复正常。
复现步骤
- 使用Pixel 8 API 35模拟器
- 在Android Studio中创建新的空白项目
- 添加依赖:
implementation("com.google.android.gms:play-services-ads:25.1.0") - 在
AndroidManifest.xml中添加示例AdMob ID:
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>
- 在
MainActivity的onCreate方法中添加以下代码:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val systemColor = this.getColor(android.R.color.system_accent1_500) Log.d("MainActivity", "ColorCheck onCreate. systemColor $systemColor") MobileAds.initialize(this) }
此时切换系统调色板后返回应用,日志始终打印相同的颜色值,仅重启应用后才会更新;不初始化MobileAds则功能正常。
已知情况
该问题仅出现在Android 15(API 35)模拟器上,Android 14和Android 16模拟器无此问题。已有相关问题反馈,但目前暂无官方修复进展。
规避方案
1. 延迟AdMob初始化
不在Activity的onCreate中立即初始化AdMob,而是等到应用首次需要加载广告时再执行初始化逻辑。这样既不影响广告功能,也能保留动态颜色的实时更新:
fun loadFirstAd() { if (!MobileAds.isInitialized()) { MobileAds.initialize(this) } // 执行广告加载逻辑 }
2. 手动触发颜色更新
在应用从后台回到前台时,手动重新获取系统颜色并更新UI。可以通过重写onResume方法实现:
override fun onResume() { super.onResume() // 重新获取最新的系统 accent 颜色 val updatedAccentColor = getColor(android.R.color.system_accent1_500) // 更新相关UI组件,例如 Toolbar 背景 supportActionBar?.setBackgroundDrawable(ColorDrawable(updatedAccentColor)) // 如果需要全局更新主题,可调用 recreate()(注意:会重启Activity,需评估用户体验影响) // recreate() }
3. 降级AdMob SDK版本
尝试使用24.x系列的play-services-ads依赖,部分开发者反馈旧版本未触发此问题,但需注意版本兼容性及潜在的功能缺失风险。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

