Android应用获取广告ID时崩溃:Google Play Services版本值异常
解决获取Advertising ID时因Google Play Services版本meta-data不匹配导致的崩溃
问题重现
在尝试获取Advertising ID时应用崩溃,堆栈信息如下:
Caused by com.google.android.gms.common.GooglePlayServicesIncorrectManifestValueException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 1XXXXXXX but found 4YYYYYY. You must have the following declaration within the element: at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(com.google.android.gms:play-services-basement@@18.0.0:32) at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(com.google.android.gms:play-services-basement@@18.0.0:2) at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzb(com.google.android.gms:play-services-ads-identifier@@17.1.0:7) at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(com.google.android.gms:play-services-ads-identifier@@17.1.0:3) at com.caratlane.android.activity.MainApplication$2.doInBackground(MainApplication.java:236) at com.caratlane.android.activity.MainApplication$2.doInBackground(MainApplication.java:231) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923)
已确认AndroidManifest.xml的application标签内存在如下配置:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
尝试过添加Advertising ID权限、直接写入版本值,均未解决问题。
解决方案
1. 统一Google Play Services依赖版本
从堆栈日志可见,play-services-basement版本为18.0.0,而play-services-ads-identifier版本为17.1.0,二者版本不一致是核心诱因。需确保所有com.google.android.gms相关依赖使用同一版本:
- 打开项目根目录的
build.gradle(或build.gradle.kts),在ext块定义统一版本号:ext { gmsVersion = "18.0.0" // 或使用最新稳定版 } - 在模块的
build.gradle中,所有gms依赖引用该统一版本:implementation "com.google.android.gms:play-services-basement:$gmsVersion" implementation "com.google.android.gms:play-services-ads-identifier:$gmsVersion"
2. 清理项目缓存并重新构建
缓存可能导致@integer/google_play_services_version的值未正确同步:
- 在Android Studio中执行
Build > Clean Project - 接着执行
Build > Rebuild Project - 若仍无效,手动删除项目根目录下的
build文件夹和~/.gradle/caches目录(注意备份重要文件)
3. 检查合并后的Manifest配置
第三方库或模块Manifest可能覆盖了com.google.android.gms.version的值:
- 打开
AndroidManifest.xml,点击底部的Merged Manifest标签 - 搜索
com.google.android.gms.version,查看最终生效的value是否与依赖版本匹配 - 若发现冲突,在主Manifest中添加
tools:replace="android:value"强制覆盖:
需确保已在Manifest根标签中引入<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" tools:replace="android:value" />xmlns:tools="http://schemas.android.com/tools"
4. 确认Google Services插件配置
若使用google-services.json,需确保插件正确配置,避免版本冲突:
- 在模块的
build.gradle中,确保插件已应用:plugins { id 'com.android.application' id 'com.google.gms.google-services' // 需放在Android插件之后 } - 插件会自动管理
google_play_services_version,此时可尝试移除手动配置的meta-data,由插件自动生成
内容的提问来源于stack exchange,提问作者pvn
相关产品推荐
相关产品推荐

