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

Android 最大化Google Play服务的向后兼容性,android,google-play-services,Android,Google Play Services,在依赖Google Play服务的情况下,维持Android应用程序最广泛的向后兼容性的推荐做法是什么 使用androidstudio的开发人员实现文档说明了如何根据v5进行编译+ compile'com.google.android.gms:play services:5.+'我正在使用的下载版本似乎最终使用了5208000版。在这一点上,我会在测试应用程序时返回错误和警告: W/GooglePlayServicesUtil Google Play services out of date.

在依赖Google Play服务的情况下,维持Android应用程序最广泛的向后兼容性的推荐做法是什么

使用androidstudio的开发人员实现文档说明了如何根据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
然而,我对谷歌Play服务的依赖Admob似乎工作正常。如果您按照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版本进行编译并假设与设备上运行的较新版本完全向后兼容是否更好?

我是一个SDK的开发人员,可以选择依赖Google Play服务,正如您所提到的,我的方法是,根据最旧版本的GooglePlay服务进行编译,该服务包含我需要的API,这样下游客户端就不会陷入类似的问题

如果您需要的API在v4中可用,那么可以根据
com.google.android.gms:play services:4.+
进行编译,并按照google的指示向用户显示升级提示。如果用户运行的是较旧版本的v4,或者他们仍然在v3上,则只能看到升级对话框。在任何一种情况下,升级对话框都应该正确地将他们引导到Play Store,在那里确实可以进行升级

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


此外,使用通配符,如果您始终保持SDK管理器的更新,每当您编译应用程序的发布版本并将其推送到Google Play时,您可能刚刚发布了一个应用程序,而Play服务的版本并不普及,或者更糟,甚至还不能在所有设备上下载,在这种情况下,用户将获得对话框,无法升级,正如您在开发过程中所看到的。

感谢您的评论,他们重申了我的理解。令人困惑的是,为什么谷歌的文档建议做一些不是最佳实践的事情,事实上是有问题的。