我正在编写一个应用程序,它使用了一些仅在最新 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 的回答也很有帮助。