升级到 '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

怎样把安卓系统升级到7.0

ubuntu16升级到18

Ubuntu怎么升级到最新版本Ubuntu 14-Ubuntu

如何从早期版本升级到Ubuntu 17.04

nodejs 如何升级到最新版本