我几个月前将我的某个应用更新为版本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')。
答案 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代码,请参阅下面的图片。
我从APK文件中提取代码。请参阅随APK提供的Google Play服务代码,查看软件包名称com.google.android.gms
,这就是为什么我的应用程序运行正常而没有任何问题。
您还可以生成应用代码,详情请见answer;
答案 1 :(得分:0)
在Google Play Services 8.3的发行说明中,我没有看到任何关于API调用的说明不再可用。我的猜测是,这些调用刚刚被弃用,而不是被删除。