Android 升级到 'com.google.android.gms:play-services-ads:18.1.0' 后出现编译错误

Android compilation error after upgrading to 'com.google.android.gms:play-services-ads:18.1.0'

我正在将我的播放服务广告库从版本 12 升级到版本 18.1:

dependencies {
    api 'com.google.android.gms:play-services-ads:18.1.0'
}

问题是编译失败并出现此错误:

.gradle/caches/transforms-1/files-1.1/play-services-ads-identifier-17.0.0.aar/75b3c9fbdc51199269673bd2fa8b6cfe/jars/classes.jar(com/google/android/gms/ads/identifier/AdvertisingIdClient.class): warning: Cannot find annotation method 'value()' in type 'GuardedBy': class file for javax.annotation.concurrent.GuardedBy not found

我去掉了 AdvertisingIdClient 的所有用法,只留下导入,但问题仍然存在:

import com.google.android.gms.ads.identifier.AdvertisingIdClient;

我做错了什么吗?

com.google.android.gms:play-services-ads:18.1.0 取决于 com.google.android.gms:play-services-ads-identifier:17.0.0,以及其他库。

您的错误表明 com.google.android.gms:play-services-ads-identifier:17.0.0 引用了 javax.annotation.concurrent.GuardedBy。但是,class 不在 Android SDK 中。 com.google.android.gms:play-services-ads-identifier:17.0.0 的 POM 文件应该引用一个实现了 class 的库,但它似乎没有。

一个实现了 class 的库是 com.google.code.findbugs:jsr305。为最近的版本(例如 3.0.2)添加对 com.google.code.findbugs:jsr305 的依赖可以让你 class,满足编译器。

因此,Play 服务 SDK 打包中似乎存在错误,我的解决方法解决了该错误。如果将来对 com.google.android.gms:play-services-ads 的更新修复了此错误,您可能希望在模块的 build.gradle 文件中添加注释以考虑删除 com.google.code.findbugs:jsr305