targetSdkVersion和Project构build目标之间的差异

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

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

项目构build目标似乎决定了API的兼容性级别,以便在编译期间使用。 targetSdkVersion仅影响给定API级别的清单元素的可见性。

有谁可以确认/解释这个?

编辑 :谢谢你们的及时回应。 我忘了在我的问题中提到,我已经阅读了Android Dev有关这些function的所有主题,并且使用了Googlesearchfunction并在Stack Overflow上进行了search。 所以我了解min / target / maxSdkVersion用于Android Market和Android系统本身的基本目的。 但是,根据来自Manifest选项有问题的人的其他post,似乎use-sdk确实对API级别的解释有影响。 至less这是我怀疑的。

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

不过,目前还不清楚targetSdkVersion是否影响Android系统上的APK的编译/运行? 或者它只是用于validation,因为使用sdk文档build议?

Solutions Collecting From Web of "targetSdkVersion和Project构build目标之间的差异"

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

根据您设置的内容决定是否在Android框架中启用/禁用兼容性function。

例如,一旦你设置targetSdkVersion = 11,你的应用程序的默认主题将被设置为@android:style/Theme.Holo这意味着你的应用程序将有一个Honeycomb风格的UI部件,将得到一个Action Bar,屏幕底部的选项菜单button。

如果您将targetSdkVersion设置为比您更低的值,那么您的默认主题将继续为@android:style/Theme – 无论您实际构build的是哪个API级别。

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

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

当然,市场完全有可能决定在未来做些什么。

构build目标是用来知道哪个SDK来编译你的APK。 这意味着,如果有任何类或方法在min SDK版本中不可用,但在之后的版本中,那些类或方法仍然可以使用。 如果用户的SDK版本与这些类/方法不兼容,则只需确保检查何时使用这些方法,并执行其他方法。

 android:targetSdkVersion 

指定应用程序目标的API级别的整数。

有了这个属性集,应用程序说它能够运行在较旧的版本(下到minSdkVersion),但是明确地testing过与这里指定的版本一起工作。 指定此目标版本允许平台禁用目标版本不需要的兼容性设置(否则可能会打开以保持向前兼容性),或启用较旧应用程序无法使用的较新function。 这并不意味着您可以针对不同版本的平台编写不同的function – 它只是通知平台您已经针对目标版本进行了testing,平台不应该执行任何额外的工作来维持与目标版本的向前兼容性。

您可以参考以下urlfind更多信息:

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

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

targetSdkVersion只会告诉Android Market,您的应用程序是在指定的API级别下开发(也可能是经过优化的)。

构build目标是您将在其上testing应用程序的目标。 targetSdkVersion是您的应用程序专门开发的一个。 大部分时间都是一样的。

你会在这里find一个详细的解释。

targetSdkVersion属性通知系统您已经针对给定版本(api级别)testing了您的应用程序,并且系统不应该启用任何兼容性行为来维持您的应用程序与目标版本的向前兼容性。 该应用程序仍然能够运行在旧版本(下到minSdkVersion)。

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

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

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

这是因为对22和23之间的权限进行了更改,对于给定的应用程序,这些权限是不允许颠倒的。

这可能是一个陷阱,如果你只是尝试了23testing版,并不确定你是否准备好支持它。