首页 文章

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

提问于
浏览
20

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

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

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

任何人都可以确认/解释这个吗?

EDIT :谢谢大家及时回复 . 我忘记在我的问题中提到我已经阅读了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 回答

  • 28

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

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

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

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

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

    Interesting note: Android Market并没有在运行时纯粹用于兼容性目的,并且可能在编译时 - 虽然我没有调查那里的行为 . 如果人们对编译器感到好奇,我可以与SDK团队联系以获取更多信息 .

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

  • 0

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

    android:targetSdkVersion
    

    一个整数,指定应用程序所针对的API级别 .

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

    您可以通过参考此URL找到更多信息:

    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

  • 4

    在Eclipse的"Create Project" -dialog中,指定minSdkVersion . 这是运行应用程序所需的API级别 .

    targetSdkVersion -attribute只告诉Android Market您的应用程序是在指定的API级别下开发(并且可能已经优化)的 .

  • 1

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

    你会找到详细的解释here .

  • 1

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

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

    这是因为22到23之间的权限更改,对于给定的应用程序不允许更改 .

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

  • 1

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

    详情进一步 - http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

相关问题