安卓 : Consequences of having targetSDK > BuildTarget

标签 android

我想知道使用 targetSDK > buildTarget 的后果。

我最近观察到,如果我在平板电脑上保留 buildTarget=16targetSDK=17 选项卡(运行 4.1.1, API Level 16) 移动到 actionBar 的中心。我无法合理化这种行为。有人能解释一下为什么会这样吗?

最佳答案

好问题!前段时间我也有类似的行为,当时 buildTarget 和 targetSDK 在所描述的方式上有所不同。我花了一些时间才弄明白,但我会尝试总结一下我的理解。

你必须区分三个重要的值:

  1. minSdkVersion:

    这是应用将(或应该!)运行的最低可用版本。在Android上安装.apk时,会检查该值,如果您运行的Android版本低于指定版本,则不会安装。

  2. buildTarget:

    这是编译应用程序 .apk 的 SDK(Eclipse 也将作为该值的目标,用于检查编译错误)。如果 buildTarget 高于 minSdkVersion,即使您的 Android 版本不支持所有方法,您也可以安装应用程序。默认情况下,这设置为您的 SDK 中可用的最新版本的 Android。您仍然可以构建应用以支持旧版本,但将构建目标设置为最新版本可让您启用新功能并优化您的应用,从而在最新设备上获得出色的用户体验。

    如果在较低的 API 级别上运行,您需要检查您正在使用的方法是否存在于运行时,否则应用程序可能会崩溃!

  3. targetSdkVersion:

    targetSdkVersion 指定您的应用应在哪个 SDK 平台上正常运行。因此,如果您针对 API 17 进行测试,您可以将 API 17 添加为 targetSdkVersion。如果使用 Android 版本 > targetSdkVersion,Android 系统将进入某种前向兼容模式以确保对应用程序的支持。将输入此兼容性行为以确保您的应用程序继续按照您预期的方式运行,因为在非 API 级别 (here are some of the most important changes) 之间的行为可能会发生一些变化。因此,为较低 API 级别开发的任何应用程序都可以在较高版本上运行,因为旧行为(如过时值)可能会在兼容模式下“模拟”。

    例如:

    如果您将 targetSdkVersion 设置为 HONEYCOMB (API 11),默认主题将更改为 Theme_Holo(即深色全息 UI)。将 targetSdkVersion 设置为较低的值将影响系统保持默认的轻量级主题,无论您将使用哪个构建 API!

    在您的情况下,API 16 和 17 之间似乎没有太多明显的变化,这应该会影响设计更改,但我想,更高的 targetSdkVersion 会影响一些额外的编译时的更改(例如包括其他类、主题、值...),这将影响不同的行为,就像上面的主题示例一样。

我希望这对您有所帮助,以找出奇怪的行为。这里有一些更多相关信息可以在 Android Developer documentation 中阅读。 .

PS:有一种前向-后向- hell :Android系统是向后兼容的,从而保证了Android应用程序的前向兼容。这意味着:例如,如果您通过 OTA 更新您的 Android 版本,所有旧应用程序都应该保持运行(因此它们将保持向前兼容)。

关于安卓 : Consequences of having targetSDK > BuildTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816292/

相关文章:

android - Aviary 与 Android Studio 集成 : Could not find com. aviary.android.feather.sdk :aviary-sdk:3. 4.3.350

java - 如何从共享首选项中读取/写入高分

android - onGetViewFactory 未调用

java - 是否可以通过 POST 发送 JSONArray 而不是 JSONObject?

Android M - GoogleAccountCredential setSelectedAccount 不起作用 - 名称不能为空

android - Gitlab,分支管道失败 - 它实际上是什么意思?它会影响我的提交吗?

android.view.InflateException 错误膨胀类

android - 如何在android中查找数组索引值

c# - 不要破坏负载

java - 对调用 Activity 的影响。 ( Intent )