查看原文
其他

出海开发者: Google Play 服务将停止为 API 等级 14 和 15 提供更新

Google Play 谷歌开发者 2019-02-14

作者:  Sam Spencer, Google Play 技术项目经理


Android "冰淇淋三明治" 版本 (Ice Cream Sandwich, 以下简称为 "ICS") 自推出至今已有七年历史,目前 ICS 系统的活跃用户占比不足 1%。因此,未来发布的 Google Play 服务将停止支持该版本,且 Google Play 商店将不再为 ICS 设备提供 14.7.99 版本以上的 Play Services APK


  • Play Services APK:

    https://developers.google.cn/android/guides/overview#the_google_play_services_apk


应用开发者注意事项


Google Play Services APK 中的功能主要以后台服务的形式在设备上运行,而且应用必须通过 Google Play services SDK 内的接口才可以访问这些功能。当前发布版本 SDK 所要求的功能已经作为 Google Play 服务集成至 ICS 系统中了,旧版本 Android 设备可以继续使用这些功能。


根据 2018 上半年新出的《SDK 版本管理说明》,每个库现在都可以单独发布并更新其 minSdkVersion。这次 Google 上调 API 最低支持等级并不要求各个库作出相应变更,较新的 SDK 组件可能会继续支持 API 等级 14 和 15,但是多数组件在更新后会调高支持等级。如果您的应用最低支持 API 等级 16,那么您不需要对构建进行任何修改,但是如果应用支持的 API 等级为 14 和 15,您可能需要继续为 ICS 设备构建并发布应用,不过在更新至新版本 SDK 的过程中,您或许会遇到以下构建错误:

Error:Execution failed for task ':app:processDebugManifest'.

> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 16 declared in library

[com.google.android.gms:play-services-FOO:16.X.YY]

       Suggestion: use 

tools:overrideLibrary="com.google.android.gms:play_services" to force usage


然而,最后一段代码提供的建议并不能解决旧版本设备无法运行应用的问题。开发者必须通过以下两个方法才能使用新版本 SDK:


1. 上调 API 最低支持等级至 "目标 API 等级 16"

我们建议开发者将应用的最低支持等级更新至 16。要终止为不再接收 Google Play 服务更新的 API 等级提供支持,您只需在应用的 build.gradle 文件中将 minSdkVersion 值修改至 16 或以上即可。如果您以此方式更新应用并将其发布至应用商店,用户将无法在 API 等级低于 16 的设备上看到或下载您的更新。不过,他们依旧可以下载并使用最后一个针对他们设备发布的应用版本。


实际上,只有很小一部分 Android 设备所用的 API 等级低于 16。您可参阅《Android 设备中各平台版本的分布统计》了解具体情况。我们认为多数旧设备并非处于活跃状态。


如果仍有大量用户在旧版本设备上使用您的应用,您可以在 Google Play 内选择多 APK 支持 ,并上传使用 Google Play 服务 14.7.99 的 APK,具体操作请查看第 2 点。


2. 构建多个 APK 以支持 API 等级低于 16 的设备

除了基本的配置和代码管理之外,您还可以构建多个 APK 以支持不同的最低 API 等级和不同版本的 Google Play 服务。您可以利用 Gradle 中的构建变体来实现这一点。首先,您需要为旧版本和新版本的应用定义构建风格 (flavor)。例如,在 build.gradle 文件中设定两种不同的产品风格,并为所用的 play-services-FOO 组件定义不同编译依赖项:

productFlavors {

    legacy {

       minSdkVersion 14

       versionCode 1401  // Min API level 14, v01

   }

   current {

       minSdkVersion 16

       versionCode 1601  // Min API level 16, v01

   }

}


dependencies {

   legacyCompile 'com.google.android.gms:play-services-FOO:16.0.0'

   currentCompile 'com.google.android.gms:play-services-FOO:17.0.0'

}


由于在上述代码中,存在针对两个不同版本的 play-services-FOO 而构建的产品风格,我们建议开发者特别留心 API 的使用情况: 如果应用只涉及 16.0.0 库中的 API,调用不受影响;但是如果您需要调用 17.0.0 库内的较新 API,请您单独再创建一个新的兼容库,以确保这些 API 仅编译到可以使用它们的应用版本中: 


  1. 请声明一个 Java 接口,用以暴露出您需在当前版本的 Play 服务中执行的更高级别功能

  2. 请构建两个 Android 库来实现此接口,其中 "当前" 实现调用新版本 API;"旧" 实现不执行任何操作或按需运行较旧版本的 Play 服务。两个库均应添加此接口。

  3. 请按照前文所述,为 play-services-FOO 定义 "legacyCompile" 和 "currentCompile" 依赖项,分别将库编译至对应的应用版本中。

  4. 如果您需要在应用的代码中调用较新的 Play API,请务必通过兼容库调用。


  • 《SDK 版本管理说明》:

    https://android-developers.googleblog.com/2018/05/announcing-new-sdk-versioning.html

  • 《Android 设备中各平台版本的分布统计》:

    https://developer.android.google.cn/about/dashboards/

  • 构建多个 APK:

    https://developer.android.google.cn/training/multiple-apks/api

  • 构建变体:

    https://developer.android.google.cn/studio/build/build-variants


为每种风格创建好对应的发布版 APK 之后 ,请您将这两个 APK 都发布到 Play 商店中,这样设备就可选择最适合的版本进行更新。请阅读官方文档,获取更多有关 Play 商店中多 APK 支持的详细信息。


  • Play 商店中多 APK 支持:

    https://developer.android.google.cn/google/play/publishing/multiple-apks



 点击屏末 |  | 了解更多 P&E 相关产品内容推荐阅读

推荐阅读


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存