【发布时间】:2012-07-20 12:36:30
【问题描述】:
我正在编写一个应用程序,它使用了一些仅在最新 API 级别 - 16 中可用的函数和类,但我希望它在 API 级别 15 的设备上正常运行。
让我们举几个例子。一个新类:Android.widget.Advanceable,以及一个新的/重命名的方法:View.setBackground():
我可以这样做:
Advanceable myAdvanceable = ...;
if (android.os.Build.VERSION.SDK_INT >= 16)
{
myView.setBackground(...);
myAdvanceable.advance();
}
else
{
myView.setBackgroundDrawable(...); // The old function name.
// Don't bother advancing advanceables.
}
如果我将 minSdk 设置为 15,但将构建目标设置为 16(即在 Project Properties->Android 中),它实际上会毫无错误地编译。至少在某些时候。 Eclipse 对错误有点随机,有时会说“setBackground() 仅在 API 级别 >= 16 或类似级别可用”,但如果我只是清理项目,这些错误就会神奇地消失。
所以我的问题是,我可以这样做吗?如果我在 API 级别 15 设备上运行它,代码不会崩溃吗?如果它实际上到达 16 代码,它只会崩溃吗?为什么 Eclipse 不阻止我构建它?
编辑 1
感谢您的回答,我想问题应该是:为什么 lint 不会警告我有关使用新 API 的信息?
我的清单中有这个,并且正在使用 API 级别 16 的函数,但它仍然没有警告我:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
此外,我仍然不确定整个类何时是 API 级别的新手,例如 Advanceable。特别是如果我将它们用作成员变量。
编辑 2
答案原来是“Eclipse 是个毛病”,但 Nico 的回答也很有帮助。
【问题讨论】:
-
您使用的是什么版本的 ADT?
-
如果您打开了 NewApi 检查,请检查 Chinaski 编辑的答案,清理您的项目,右键单击它并选择 Android 工具 > 运行 Lint:检查常见错误。
-
如果“保存文件时,检查错误”和“导出应用程序时运行完整的错误检查...”这两个复选框都被选中,请参见 Lint 错误检查选项卡。
-
是的,我将 NewApi 设置为错误,并且设置了“保存文件时...”和“运行完整的错误检查...”复选框。大多数时候它仍然没有运行 lint。但它偶尔确实为我正在编辑的文件运行它(直到我保存它)。看起来像是 Eclipse 中的一个错误,这是人类已知的最错误的 IDE。
标签: android api compatibility