【问题标题】:how to support supporting older android versions in eclipse如何在 Eclipse 中支持支持较旧的 android 版本
【发布时间】:2012-06-15 21:27:29
【问题描述】:

我的应用需要以 API 级别 7 及更高级别为目标,但我希望在新版本可用时选择性地使用新版本的功能。例如,我可能有这样的代码:

if (Build.VERSION.SDK_INT >= 8) {
    base64String = android.util.Base64.encodeToString(bytes, android.util.Base64.DEFAULT);
} else {
    base64String = MyCustomBase64.encodeBytes(bytes);
}

但是,当我在 Eclipse 中将项目配置为以“Android 2.1”(API 7)为目标时,找不到类 android.util.Base64,因为它仅适用于 API 8 及更高版本。然后 Eclipse 将该行指定为编译错误(红色“x”),因为该类不在构建路径上。

我的问题:在使用 Eclipse 进行 Android 开发时,处理此类开发(支持目标环境中实际上不存在的功能)的“正确”方式是什么?

我总是可以将 Eclipse 中的目标更改为 2.2 (API 8),但这也不理想。它造成了我可能在不知不觉中使用了仅存在于 8+ 中的功能并且没有被 Eclipse 通知这一事实的情况。

【问题讨论】:

  • 你的 MyCustomBase64 是什么?我有同样的问题...

标签: android eclipse android-3.0-honeycomb backwards-compatibility android-2.2-froyo


【解决方案1】:

您已经回答了自己的问题。

我总是可以将 Eclipse 中的目标更改为 2.2 (API 8)

这就是它的完成方式。您仍然可以将清单中的 minSDK/targetSDK 设置为 7。AFAIK 您只需要使用 if 语句,就像您在任何来自更高 API 级别的代码中显示的那样。

【讨论】:

  • 在项目目标设置为 2.1 时,使用 if 语句将来自未来 API 级别的代码并不会阻止它们显示为编译错误。该文档似乎描述了首选方法:tools.android.com/recent/lintapicheck
  • 不过好像有bug。我在我的代码中使用了 String.isEmpty(),同时使用了 9 的目标 API 和 7 的最低级别(在清单中)并且它没有被 Lint 检查器标记为错误。应该是的。
  • hmm 在 lint 工具看起来很漂亮之前没有玩过它。我认为如果您打算使用 API 7 构建它但又想使用 API 8 中的功能,那么您无法避免编译错误。我相信您唯一的选择是使用更高级别的 API 构建项目跨度>
  • 构建过程(我继承的,在某种程度上是“黑魔法”)使用 gradle,产品是一个 APK,可以在 API 8 级设备上正确安装和运行。我假设它从清单中读取 minSdkVersion 设置并根据该设置进行构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2014-06-15
相关资源
最近更新 更多