首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编写向后兼容的Android代码

编写向后兼容的Android代码
EN

Stack Overflow用户
提问于 2012-07-21 21:58:51
回答 1查看 32.8K关注 0票数 53

我正在编写一个应用程序,它使用一些仅在最新的API level - 16中可用的函数和类,但我希望它在API level 15的设备上运行时没有错误。

让我们举几个例子。一个新的类:Android.widget.Advanceable,以及一个新的/重命名的方法:View.setBackground()

我可以这样做:

代码语言:javascript
复制
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函数,但它仍然没有警告我:

代码语言:javascript
复制
<uses-sdk android:minSdkVersion="15"
    android:targetSdkVersion="16"/>

此外,我仍然不确定何时整个类都是新的应用程序编程接口级别,例如Advanceable。特别是当我使用它们作为成员变量时。

编辑2

答案被证明是"Eclipse像地狱一样有but“,但Nico的答案也非常有帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-07-21 22:08:14

使用较新的构建目标并保证在正确的环境中调用较新的API是一种常见的做法。谷歌甚至从ADT17开始添加了@TargetApi()注释,为有条件加载的代码指定本地覆盖。

有关更多详细信息,请参阅Lint API check

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11592820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档