我几个月前更新了我的一个应用程序到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),这就是当时导致编译问题的原因。
我遇到的问题是由于Google Play服务的8.1版本不再兼容旧版(因为上述更改),因此我使用的所有库都必须使用8.1+构建,如果其中一个库使用旧版本,则编译将失败,并显示以下错误:
java.lang.IncompatibleClassChangeError:预期类型为接口的方法'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()',但实际上是虚拟类型(声明'java.lang.reflect.ArtMethod'出现在/system/framework/core-libart.jar中)
编辑2:
尽管我面临的问题与已删除的API无关,但我找到了一个在Google Play服务版本7中被删除的API的示例:
我想要理解的是,如果更新我的应用程序的Google Play服务实际上为应用程序带来了背景改进(比如使用最新的库算法),还是这些改进在设备安装新的Google Play服务版本时就已经可用了。
编辑:
在进一步调查后,我发现没有API实际上被破坏了,但是一些接口被转换为抽象类(请参见https://developers.google.com/android/guides/releases#september_2015_-_v81),这就是当时导致编译问题的原因。
我遇到的问题是由于Google Play服务的8.1版本不再兼容旧版(因为上述更改),因此我使用的所有库都必须使用8.1+构建,如果其中一个库使用旧版本,则编译将失败,并显示以下错误:
java.lang.IncompatibleClassChangeError:预期类型为接口的方法'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()',但实际上是虚拟类型(声明'java.lang.reflect.ArtMethod'出现在/system/framework/core-libart.jar中)
编辑2:
尽管我面临的问题与已删除的API无关,但我找到了一个在Google Play服务版本7中被删除的API的示例:
GooglePlayServicesClient
(请参见无法解决符号'GooglePlayServicesClient')。
GooglePlayServicesClient
类,但在Google Play服务8.4版本中不可用。 - FrancoGooglePlayServicesClient
版本6.5,而我的手机版本为8.3(不包含该类)时,为什么一切都正常工作?谢谢你的帮助,但如果你无法回答这个问题,那么你并没有回答我的问题,我没有时间继续解释它。 - Franco