targetSdkVersion和Project构建目标之间的区别

时间:2011-08-27 15:45:44

标签: android api build

在Manifest文件中设置的targetSdkVersion与构建环境中设置的Project构建目标(例如Eclipse)之间有什么区别?

我试图找到有关这两个功能的更多信息,但我找不到任何明确和具体的解释。

似乎Project构建目标决定了在编译期间使用的API兼容级别。当targetSdkVersion仅影响给定API级别的清单元素的可见性时。

有人可以确认/解释这个吗?

编辑:谢谢大家及时回复。我忘记在我的问题中提到我已经阅读了Android Dev关于这些功能的所有主题,并且还搜索了它并在Stack Overflow上搜索了它。所以我理解min / target / maxSdkVersion在Android Market和Android系统中使用的基本目的。但是,根据人们在使用此Manifest选项时出现问题的其他帖子,似乎uses-sdk确实会对API级别的解释方式产生影响。至少这是我怀疑的。

这里给出了非常好的解释: http://developer.android.com/guide/appendix/api-levels.html

但是,目前还不清楚targetSdkVersion是否会影响Android系统上APK的编译/运行时间?或者它仅用于验证,因为uses-sdk文档建议?

6 个答案:

答案 0 :(得分:28)

targetSdkVersion属性确实会影响应用程序的运行时行为。

根据您设置的内容,将确定是否在Android框架中启用/禁用了兼容性功能。

例如,一旦设置了targetSdkVersion = 11,您的应用程序的默认主题将设置为@android:style/Theme.Holo - 这意味着您的应用程序将具有Honeycomb样式的UI小部件,将获得一个Action Bar,并且不会有屏幕底部的选项菜单按钮。

如果您将targetSdkVersion设置为较低的值,则默认主题将继续为@android:style/Theme - 无论您实际构建的是哪个API级别。

targetSdkLevel还会影响<supports-screens>元素的默认值,这反过来将决定您的应用程序是否以密度兼容模式运行。

有趣的说明:Android Market目前实际上并未使用targetSdkLevel属性。它纯粹在运行时用于兼容性目的,并且可能在编译时使用 - 尽管我没有查看那里的行为。如果人们对编译器感到好奇,我可以与SDK团队联系以获取更多信息。

当然,市场可能会在未来决定对此做些什么。

答案 1 :(得分:4)

Build Target用于了解用哪个SDK编译你的APK。这意味着如果您的min SDK版本中没有任何类或方法,但是在此之后的版本中,那些类或方法仍然可用。如果用户的SDK版本与这些类/方法不兼容,您只需确保检查何时使用它们并执行备用方法。

android:targetSdkVersion

指定应用程序所针对的API级别的整数。

设置此属性后,应用程序会说它能够在旧版本(低至minSdkVersion)上运行,但已经过明确测试,可以使用此处指定的版本。指定此目标版本允许平台禁用目标版本不需要的兼容性设置(否则可能会打开以保持向前兼容性)或启用较旧应用程序不可用的较新功能。这并不意味着您可以为不同版本的平台编写不同的功能 - 它只是通知平台您已针对目标版本进行了测试,并且平台不应执行任何额外的工作来保持与目标版本的向前兼容性。 / p>

您可以参考以下网址找到更多信息:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

还有一篇很好的文章由谷歌写检查,以确保你是当前用户Android操作系统版本将使用相应的类/方法

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

答案 2 :(得分:1)

在Eclipse的“创建项目”-dialog中,指定minSdkVersion。这是运行应用程序所需的API级别。

targetSdkVersion - 属性仅告知Android Market您的应用程序已开发(并可能已优化)以在指定的API级别下运行。

答案 3 :(得分:1)

构建目标是您将在其上测试应用程序的目标。 targetSdkVersion是您专门为其开发的应用程序。两者在大多数时候都是相同的。

您会找到详细解释here

答案 4 :(得分:1)

这个问题已经得到了充分的回答,但我想指出,Google Play商店根本不使用targetSdkVersion已经不完全正确了。

在您将targetSdkVersion设置为23(Marshmallow 6.0)并上传您的APK的特定情况下,即使您上传Beta版本,您也无法再为具有较低targetSdkVersion的应用提交APK比23岁。

这是因为22到23之间的权限更改,不允许对给定的应用进行撤消。

如果您只是在Beta中试用23并且不确定您是否已准备好支持它,那么这可能会有点陷阱。

答案 5 :(得分:0)

targetSdkVersion属性通知系统您已根据给定版本(api级别)测试了您的应用,系统不应启用任何兼容性行为来维持您的应用与目标版本的向前兼容性。该应用程序仍然可以在旧版本上运行(直到minSdkVersion)。

有关详细信息,请http://developer.android.com/guide/topics/manifest/uses-sdk-element.html