【发布时间】:2016-01-11 10:02:48
【问题描述】:
几个月前,我将我的一款应用更新到了 Google Play 服务的 8.3.0 版,该版本破坏了某些与位置相关的 API 的向后兼容性。
所以我的问题是,如果我的设备已经安装了 Google Play 服务 8.3.0,即使我使用 6.5.87 版本运行我的应用程序,它怎么可能仍然工作? (鉴于 6.5.87 上的 API 在 8.3.0 上不再可用)设备是否保留旧版本的 Google Play 服务以支持向后兼容性?或者,被删除的 API 是否在已安装的 Google Play 服务版本中可用,并隐藏在与开发人员共享的库中?
我想在这里了解的是,如果在我的应用上更新 Google Play 服务实际上会为应用带来后台改进(例如使用库中的最新算法),或者这些改进是否在设备上已经可用安装新的 Google Play 服务版本。
编辑:
在更详细地研究之后,我发现实际上没有任何 API 被破坏,但是一些接口被转换为抽象类(参见 https://developers.google.com/android/guides/releases#september_2015_-_v81),这就是我当时遇到的编译问题的原因。
我遇到的问题是因为 8.1 版 Google Play 服务不再与旧版本兼容(因为上面提到的更改),所以我使用的所有库都必须使用 8.1+ 构建,如果其中一个是用旧版本构建的,然后编译失败并出现以下错误:
java.lang.IncompatibleClassChangeError: The method 'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()' was expected to be of type interface but instead was found to be of type virtual (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
编辑 2:
尽管我遇到的问题与删除的 API 无关,但我发现了一个在 Google Play 服务版本 7 中被删除的 API 示例:GooglePlayServicesClient(请参阅Cannot resolve symbol 'GooglePlayServicesClient')。
【问题讨论】:
标签: android google-play-services