最大限度地提高Google Play服务的向后兼容性



在依赖Google Play Services的情况下,保持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

然而,我对Google Play Services的依赖Admob似乎工作正常。如果你按照谷歌的建议调用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的开发人员,该SDK可选地依赖于Google Play Services,正如您所提到的,我的方法是根据最旧版本的Google Play Services进行编译,该版本包含我需要的API,这样下游客户端就不会遇到这样的问题。

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

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

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

最新更新