升级到 'com.google.android.gms:play-services-ads:18.1.0' 后的 Android 编译错误
Posted
技术标签:
【中文标题】升级到 \'com.google.android.gms:play-services-ads:18.1.0\' 后的 Android 编译错误【英文标题】:Android compilation error after upgrading to 'com.google.android.gms:play-services-ads:18.1.0'升级到 'com.google.android.gms:play-services-ads:18.1.0' 后的 Android 编译错误 【发布时间】:2019-11-28 19:08:05 【问题描述】:我正在将我的 play-services-ads 库从版本 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):警告:在“GuardedBy”类型中找不到注释方法“value()”:找不到 javax.annotation.concurrent.GuardedBy 的类文件
我去掉了 AdvertisingIdClient 的所有用法,只留下了导入,但问题仍然存在:
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
是不是我做错了什么?
【问题讨论】:
错误中提到的类 (javax.annotation.concurrent.GuardedBy
) 在 Android SDK 中似乎不存在。该类还有其他版本,such as androidx.annotation.GuardedBy
。基于this old bug report,尝试将implementation "com.google.code.findbugs:jsr305:3.0.2"
添加到您的依赖项中,看看是否有帮助。
有效!现在我想知道如何...... @CommonsWare 你能解释一下发生了什么吗?
play-services-basement
的 AAR 包含一个 proguard.txt
,它指定:-dontwarn javax.annotation.**
无论您是否包含包含 javax.annotation.concurrent.GuardedBy
的依赖项,都应该允许您的应用成功 ProGuard gradle 任务失败?另外,您使用的是什么版本的 Android Studio、gradle 和 com.android.tools.build:gradle
?
@jkasnicki - 类路径'com.android.tools.build:gradle:3.4.2'
@jkasnicki 任务 :mpsrv:compileDebugJavaWithJavac 失败。
【参考方案1】:
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
。但是,该类不在 Android SDK 中。 com.google.android.gms:play-services-ads-identifier:17.0.0
的 POM 文件应该引用具有该类实现的库,但似乎没有。
有一个实现该类的库是com.google.code.findbugs:jsr305
。为最近的版本(例如 3.0.2)添加对 com.google.code.findbugs:jsr305
的依赖会为您提供该类,从而满足编译器。
因此,Play Services SDK 打包中似乎存在错误,我的解决方法解决了该错误。如果将来对 com.google.android.gms:play-services-ads
的更新修复了此错误,您可能需要在模块的 build.gradle
文件中添加注释以考虑删除 com.google.code.findbugs:jsr305
。
【讨论】:
以上是关于升级到 'com.google.android.gms:play-services-ads:18.1.0' 后的 Android 编译错误的主要内容,如果未能解决你的问题,请参考以下文章
谷歌地图修订版。 30 日食用法:google_play_services_version