设备是否保留了多个版本的Google Play服务?

时间:2016-01-11 10:02:49

标签: android google-play-services

我几个月前将我的某个应用更新为版本8.3.0的Google Play服务,该版本打破了某些与位置相关的API的向后兼容性。

所以我的问题是,如果我的设备已经安装了Google Play服务8.3.0,即使我使用6.5.87版本运行我的应用程序,它仍然可能仍然有效吗? (鉴于8.5.0上的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: 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')。

2 个答案:

答案 0 :(得分:0)

无法自动为您的应用提供

更新Google Play服务版本时,您必须使用新版Google Play服务代码更新您的应用,然后您的应用才有新算法

如果您的应用具有旧版Google Play服务&设备有新版本: 不要担心您的应用运行正常,因为您的应用已在您的APK中安装了Google Play服务代码。(设备不保留旧版本代码更新为新版Google Play服务时。)

如果您的应用拥有新版Google Play服务&设备已旧: 然后您必须在他/她的设备中询问用户更新Google Play服务,然后您的应用在他/她的设备中正常工作

因此,设备无需拥有多个版本的Google Play服务

编辑:2015年1月12日

我已经给你回答了这一点,但我仍然会给你一个例子

我在我的应用中使用了Google Play服务(版本7.8.0),用于位置(com.google.android.gms:play-services-location:7.8.0)和地图(com.google.android.gms:play-services-maps:7.8.0),当前的Google Play服务版本是8.4.0仍然是我的应用工作文件为什么?因为某些谷歌播放服务代码附有我的APP代码,请参阅下面的图片。

enter image description here

我从APK文件中提取代码。请参阅随APK提供的Google Play服务代码,查看软件包名称com.google.android.gms,这就是为什么我的应用程序运行正常而没有任何问题。

您还可以生成应用代码,详情请见answer;

答案 1 :(得分:0)

Google Play Services 8.3的发行说明中,我没有看到任何关于API调用的说明不再可用。我的猜测是,这些调用刚刚被弃用,而不是被删除。