了解 Android API 级别

Posted

技术标签:

【中文标题】了解 Android API 级别【英文标题】:Understanding Android API Levels 【发布时间】:2012-07-05 07:56:18 【问题描述】:

Jelly Bean 已经问世,它们有一些非常不错的功能。我的问题是,我想针对尽可能多的设备,但同时拥有一个可以使用最高 API 级别的所有功能的应用。

比如说我有这个

<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="16"/>

我在 API 16 上构建了我的应用程序。有没有办法限制代码的某些部分只在您运行能够运行它的设备时运行?例如,如果我想要 NFC,那么只有姜饼及以上设备才能使用该功能,否则 froyo down 甚至看不到该功能。

【问题讨论】:

【参考方案1】:

基本上,您可以使用从 Android 3.0 引入的许多新 API(例如 Fragment 引擎),包括 Android Support v4 as Referenced Library。

你可以在这里找到一些参考:

http://developer.android.com/reference/android/support/v4/app/package-summary.html

这里:

http://developer.android.com/tools/extras/support-library.html

另一方面,如果你想使用 NFC 功能,你可以声明这个使用功能:

 <uses-feature android:name="android.hardware.nfc" android:required="true" />

或者,如果您想为不支持此功能的设备提供代码替代,您可以执行以下操作:

 if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) 
        //code for devices with NFC support
  else 
      //code for others devices
 

【讨论】:

比如说我正在使用 api 16 级构建,包括 v4,如果我的设备正在运行 api 9 姜饼,那么我可以获得运行姜饼的设备的片段吗?所以 v4 api 将覆盖 api 级别 16 包含的内容并编译它以便姜珠理解?【参考方案2】:

从 ADT r16 开始,我们可以使用 Lint 扫描并检查项目是否有所有新 API,详情请查看我的回答 here:

NewApi:查找对并非所有目标 API 版本都支持的 API 的 API 访问。

或者,您也可以按 API 级别对代码进行条件分支,而不是按功能(Stefano 的回答)对代码进行条件分支:

if (android.os.Build.VERSION.SDK_INT >= 9) 
  // do NFC stuff

希望这会有所帮助。

【讨论】:

以上是关于了解 Android API 级别的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅持续更新:Android开发时需要了解的平台代号,版本,API级别和NDK版本等

我的Android进阶之旅持续更新:Android开发时需要了解的平台代号,版本,API级别和NDK版本等

Android各个版本的介绍

适用于所有 API 级别的 Android 剪贴板代码

如何检查 Android 12 API 级别?

android:actionBarStyle 需要 API 级别 11