我正在编写一个应用程序,它使用一些仅在最新的API level - 16中可用的函数和类,但我希望它在API level 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()只在>=级别的Eclipse 16中可用“或类似的错误,但如果我只是清理项目,这些错误就会神奇地消失。
所以我的问题是,我可以这么做吗?如果我在API级别15的设备上运行它,代码不会崩溃吗?只有当它真正到达16代码时才会崩溃吗?为什么Eclipse不阻止我构建它呢?
编辑1
谢谢你的回答,我想问题应该是:为什么lint不警告我使用新的API?
我在清单中有这个,并且正在使用API级别16函数,但它仍然没有警告我:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
此外,我仍然不确定何时整个类都是新的应用程序编程接口级别,例如Advanceable
。特别是当我使用它们作为成员变量时。
编辑2
答案被证明是"Eclipse像地狱一样有but“,但Nico的答案也非常有帮助。
发布于 2012-07-21 22:08:14
使用较新的构建目标并保证在正确的环境中调用较新的API是一种常见的做法。谷歌甚至从ADT17开始添加了@TargetApi()
注释,为有条件加载的代码指定本地覆盖。
有关更多详细信息,请参阅Lint API check。
https://stackoverflow.com/questions/11592820
复制相似问题