android - 最大化 Google Play 服务的向后兼容性

标签 android google-play-services

在依赖 Google Play 服务的同时保持 Android 应用最广泛的向后兼容性的推荐做法是什么?

使用 Android Studio 的开发者实现文档指示针对 v5.+ 进行编译 compile 'com.google.android.gms:play-services:5.+' 我正在使用的可用下载似乎最终使用版本 5208000。此时我收到错误和警告测试应用程序时返回:

W/GooglePlayServicesUtil Google Play services out of date. Requires 5208000 but found 5089036
E/GooglePlayServicesUtil GooglePlayServices not available due to error 2

Admob,我对 Google Play 服务的依赖,似乎可以正常工作。如果您按照 Google 的建议调用 isGooglePlayServicesAvailable()GooglePlayServicesUtil.getErrorDialog(),用户会被告知应用程序需要升级才能运行并发送到商店没有可用的更新。

在其他地方,保持向后兼容性意味着针对支持您所需功能的最旧 API 版本进行编译。所以我尝试使用 v4 compile 'com.google.android.gms:play-services:4.+' 生成另一个错误:

E/GooglePlayServicesUtil﹕ The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

四处搜索表明这是一个虚假报告,可以忽略。

如果我针对较新的 API 版本进行编译,但设备上不存在该版本,是否可以正常运行?还是必须哄用户升级?针对较旧的 API 版本进行编译并假设事物与设备上运行的较新版本正确向后兼容是否更好?

最佳答案

我是一个可选依赖于 Google Play 服务的 SDK 的开发人员,正如您提到的,我的方法是针对包含我需要的 API 的最旧版本的 Google Play 服务进行编译,这样下游客户不会遇到这样的问题。

如果您需要的 API 在 v4 中可用,则可以安全地针对 com.google.android.gms:play-services:4.+ 进行编译,并按照 Google 的指示显示提示用户升级。如果用户运行的是旧版本的 v4,或者他们仍在使用 v3,则他们只会看到升级对话框。在任何一种情况下,升级对话框都应该正确地将他们引导至 Play 商店,那里确实有可用的升级。

如果您需要的 API 仅在 v5 中可用,请不要使用通配符版本(即 5.+)。您应该针对可能广泛使用的旧版本进行编译,例如 com.google.android.gms:play-services:5.0.89。使用通配符意味着您将针对安装在 Android SDK 管理器中的最新版本的 Google Play 服务进行编译,无论您碰巧在什么计算机/环境上进行编译,这对我来说只是感觉不对 - 我不不在乎是不是 Google 构建了这个库,我想确切地知道我正在将什么编译到我的应用程序中。

此外,使用通配符,如果您始终保持 SDK 管理器更新,则每当您编译应用的发布版本然后将其推送到 Google Play 时,您可能刚刚发布了一个针对某个版本的 Play 服务的应用广泛使用,或者更糟 - 甚至还不能在每台设备上下载,在这种情况下,用户将收到对话框并且无法升级,正如您在开发过程中看到的那样。

关于android - 最大化 Google Play 服务的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810760/

相关文章:

java - 如果最终确定,公共(public) getter 和 setter 是否适用于 Android? Java 中的最终正确性与 C++ 中的常量正确性一样重要吗?

java - setDescriptionTextSize(float size) 无法解析方法 MPAndroidChart

google-play-services - 如果手机上未安装 Play 服务,是否可以使用 Google 条形码阅读器?

android - 无法获取最新的Google Play服务-适用于Android的Google API

android - Android Geofences 是否保持 Activity 状态直到删除/过期或仅直到我的 PendingIntent 启动

android - 裁剪不适用于图库图像

android - 如何从我的应用程序链接到我在 Google Play 中的应用程序?

android - 根据buildType更改android项目中的.properties文件和settings.gradle文件

android - 错误 : fix the version conflict (google play services) Kotlin

android - 是否可以在 google play 游戏服务中连接两个应用程序的排行榜?