虽然最新版 Android 通常为您的应用提供了出色的 API,但在更多设备更新之前,您应该继续支持旧版 Android。本文课介绍了如何在利用最新 API 的同时继续支持旧版本。
使用 Android Studio 的新建项目向导查找正在运行各个版本 Android 的活跃设备分布。此分布基于访问 Google Play 商店的设备数量。通常,我们建议支持大约 90% 的活跃设备,同时将您的应用定位到最新版本。
提示:为了在多个 Android 版本中提供最佳的功能,您应该在应用中使用 Android 支持库,该库允许您在旧版本上使用一些最新的平台 API。
指定最低和目标 API 级别
AndroidManifest.xml 文件描述了您的应用的详细信息,并指明了其支持的 Android 版本。具体而言,<uses-sdk>
元素的 minSdkVersion
和 targetSdkVersion
属性指明了您的应用兼容的最低 API 级别以及您设计和测试应用所针对的最高 API 级别。
例如
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> ... </manifest>
随着新版 Android 的发布,一些样式和行为可能会发生变化。为了让您的应用能够利用这些变化并确保其符合每个用户设备的样式,您应将 targetSdkVersion
值设置为与可用的最新版 Android 匹配。
在运行时检查系统版本
Android 在 Build
常量类中为每个平台版本提供了一个唯一代码。在您的应用中使用这些代码来构建条件,确保依赖更高 API 级别的代码仅在系统上提供了这些 API 时才执行。
Kotlin
private fun setUpActionBar() { // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { actionBar.setDisplayHomeAsUpEnabled(true) } }
Java
private void setUpActionBar() { // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } }
注意:解析 XML 资源时,Android 会忽略当前设备不支持的 XML 属性。因此,您可以安全地使用仅由较新版本支持的 XML 属性,而不必担心旧版本在遇到该代码时会出错。例如,如果您设置 targetSdkVersion="11"
,您的应用默认会在 Android 3.0 及更高版本中包含 ActionBar
。要随后向操作栏添加菜单项,您需要在菜单资源 XML 中设置 android:showAsAction="ifRoom"
。在跨版本 XML 文件中执行此操作是安全的,因为旧版 Android 只会忽略 showAsAction
属性(也就是说,您不需要在 res/menu-v11/
中使用单独的版本)。
使用平台样式和主题
Android 提供了用户体验主题,使应用具有底层操作系统的外观和风格。这些主题可以在清单文件内应用于您的应用。通过使用这些内置样式和主题,您的应用将自然地遵循每个新版本 Android 的最新外观和风格。
使您的 activity 看上去像一个对话框
<activity android:theme="@android:style/Theme.Dialog">
使您的 activity 具有透明背景
<activity android:theme="@android:style/Theme.Translucent">
应用您自己在 /res/values/styles.xml
中定义过的自定义主题
<activity android:theme="@style/CustomTheme">
将主题应用于您的整个应用(所有 activity),将 android:theme
属性添加到 <application>
元素中
<application android:theme="@style/CustomTheme">
要详细了解如何创建和使用主题,请阅读样式和主题指南。