【问题标题】:API target and min confusionAPI 目标和最小混淆
【发布时间】:2014-03-29 19:14:29
【问题描述】:

我对目标构建和 sdk 使用感到困惑

假设我有这个代码

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
 //do xyz
}

假设我针对 API 19 (kitkat) 构建,清单中的目标 api 是 19,我支持的最低 api 是 9

现在如果使用 API 9 的设备运行上述代码,它会崩溃吗?我希望答案是肯定的,因为它不会理解 Build.VERSION_CODES.KITKAT 的含义。但是,上面的检查有什么意义呢?

请帮忙澄清一下

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    它不会崩溃。只是 if 中的代码不会被执行。 Build.VERSION_CODES.KITKAT 是一个常量字段,正如您可以阅读 here 一样,常量字段被编译器替换为数字本身。

    【讨论】:

    • 这是我一直在寻找的答案。在机器上运行之前,我不知道编译器用数字替换它。谢谢
    【解决方案2】:

    较低版本的 android 将使用支持库,如果对 kit-kat 的检查失败,它将恢复到该版本支持的最接近的 possibkle 形式......通过支持库...... 你不能在低于最低版本的任何东西上运行你的应用程序,但只要它高于最低版本,它就会找到一种低于目标版本运行的方法

    【讨论】:

      【解决方案3】:

      不,它不会崩溃,因为它的 Build.VERSION.SDK_INT 值为 9。它根本不会进入您的 if 子句。只有具有 API 版本 19 或更高版本的设备才能在 if 中运行您的代码。 Build.VERSION_CODES.KITKAT 等于 19。

      【讨论】:

        【解决方案4】:

        您发布的代码不会崩溃,因为根据您在清单中设置的目标 API,为您的应用的每个构建(作为 R 文件)创建和编译类 Build

        当您将目标 API 设置为 19 时,Build 类将包含字段 Build.VERSION_CODES.KITKAT,因为它从 API 级别 19 开始存在。

        【讨论】:

          猜你喜欢
          • 2011-10-23
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 2016-10-07
          • 2017-09-19
          • 2018-02-04
          • 2021-12-12
          • 2011-12-07
          相关资源
          最近更新 更多