【问题标题】:Why to specify targetsdkversion and why it has to be always have latestsdk value?为什么要指定 targetsdkversion 以及为什么它必须始终具有 latestsdk 值?
【发布时间】:2014-12-08 20:41:52
【问题描述】:

我在 android 中看到了很多关于 targetsdk 版本的问题。但解释不清楚。与 minsdk 和 maxsdk 版本相比,我认为它有点棘手。我浏览了 developer.android.com 并阅读了有关使用 sdk 标签的信息,并且很少有视频解释这个概念。但力图清楚地了解targetsdk版本。正如我之前所说,已经有成千上万的关于堆栈溢出的问题和答案,我再次发布这个问题以获得简单而清晰的解决方案。所以请大家耐心回答这个问题并帮助我。

这是 developer.android.com 中的声明。

但是,如果平台的 API 级别高于您应用的 targetSdkVersion 声明的版本,系统可能会启用兼容性行为,以确保您的应用继续按照您期望的方式运行。您可以通过指定 targetSdkVersion 以匹配其运行平台的 API 级别来禁用此类兼容性行为。

我做了小样本,我将targetsdkversion指定为14,我尝试在android api level 19(android 4.4)上运行,我的应用程序安装没有任何问题并且运行良好。

如果我删除了 targetsdkverion,那么默认情况下它将被设置为 minsdkversion 值,然后我的应用程序再次安装并且工作正常。

我的样本和上面的陈述都是矛盾的,所以我对这个概念感到困惑。请通过视频教程的简单解释详细解释我。

Q1) 现在如果我指定targetsdkversion 会有前向兼容性吗? (我希望向后兼容会有仪式。

Q2) 为什么每个人都说我们应该始终将targetsdk 版本设置为最新版本?

Q3) 在什么情况下我们必须指定低于最新版本发布号的targetsdkversion。这有什么影响? (即 targetsdkversion = 14 和 maxsdkverion = 19)。

请大家帮忙。 谢谢..

【问题讨论】:

    标签: android target-sdk


    【解决方案1】:

    我做了小样本,我将targetsdkversion指定为14,我尝试在android api level 19(android 4.4)上运行,我的应用程序安装没有任何问题并且运行正常。

    这并不意味着什么。我相信在大多数情况下它会表现得很好,但是,可能会有一些功能可能表现得或看起来有点不同......我不知道,主题,UI等。它所告诉的只是SDK版本是前向兼容,一旦你对每一个 SDK 版本、每一个 Android 功能、每一个 Android 设备进行了相同的测试,那么你可能会遇到这样一个事实:你应该遵循指南并将 TargetSDK 设置为最新版本

    现在如果我指定targetsdkversion 会有前向兼容性吗? (我希望向后兼容会有仪式

    这是一个很难回答的问题,因为我们永远不知道 Android 未来会发生什么,但就目前而言,Android 团队正在努力保持 API 级别“向前兼容”,即使它需要系统启用兼容性行为

    为什么每个人都说我们应该始终将targetsdk版本设置为最新版本?

    这是一个最佳实践指南,它围绕不使系统启用兼容性行为而演变,因为这种“可能”使您的应用行为有点不同,因为您的应用的目标 Dk 低于其运行的当前系统

    在什么情况下我们必须指定低于最新版本发布号的targetsdkversion。这有什么影响? (即targetsdkversion = 14和maxsdkverion = 19)

    如上所述,您应该始终以最新的 sdk 版本为目标。 Android 不鼓励maxSdkVersion,您不应使用此设置以避免与系统更新相关的某些问题。更具体地说,这里是文档的摘录...

    在 Android 1.5、1.6、2.0 和 2.0.1 中,系统会在安装应用程序以及在系统更新后重新验证应用程序时检查此属性的值。无论哪种情况,如果应用的 maxSdkVersion 属性低于系统自身使用的 API Level,那么系统将不允许安装应用

    因此,效果很明显,用户可能无法安装您的应用程序。

    所以,总结一下,如果你仍然不明白,我的建议是你应该遵循 Android 文档认为的最佳实践,至少你会记住一些更聪明的人是处理你无法理解的事情:P

    根据评论编辑

    兼容性行为只是 Android 使用的一个非常笼统的术语,用于描述它何时评估为针对较低 SDK 版本构建的应用执行不同的例程或功能。一个例子是 Android 如何处理过时的权限。例如,假设您有一个 API 级别 8 设备运行一个针对相同 API 级别的应用程序,并且此应用程序请求 PERSISTENT_ACTIVITY Permission,这已在 API 级别 8 中被弃用。会发生什么情况是 android 将有效地评估此权限?

    现在,请考虑针对相同 API 级别但这次在 KitKat 上运行的相同应用。会发生什么?我不完全知道,但有根据的猜测是,Android 将启用兼容性行为以忽略此权限。现在明白了吗?

    【讨论】:

    • Leo,你所说的兼容性行为是什么意思?能详细解释一下吗?
    • @RockandRoll 不,我不能详细说明,因为它太广泛了,而且已经有很多资源。我将在我的答案中添加一个编辑,但只是为了突出一个关于 android 启用兼容性行为的案例,这是一个非常笼统的术语
    • @RockandRoll 我刚刚添加了一个编辑,以便更好地说明兼容性行为的工作原理
    • 好的.. 谢谢 Leo.. 明白了。感谢你的帮助。这个问题的最终结论是。指定 TargetSDkversion 不会限制我们的应用程序向前和向后兼容。但它不允许应用程序适应兼容的行为。即它会告诉 android 系统仅使用该特定 API 级别中存在的那些 API.. rite?
    • @RockandRoll 有点……这样说吧,它告诉 android 在该 API 级别的“沙盒”中运行应用程序,这意味着您的应用程序可能看起来不像系统的其余部分,简单。
    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-11-16
    • 2020-08-09
    • 2015-07-04
    • 2018-01-07
    相关资源
    最近更新 更多