【问题标题】:How can Build.VERSION_CODES possibly work?Build.VERSION_CODES 怎么可能工作?
【发布时间】:2014-11-15 01:33:53
【问题描述】:

我对 Android API 的内部运作感到困惑。

如果我的应用是针对 Android 5.0 编译的,那么以下内容可以在运行 Android 5.0 及更高版本的设备上运行:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)

但是,如果我在运行旧版本 Android 的设备上运行它,它仍然有效。我的假设是该设备上的库没有变量Build.VERSION_CODES.LOLLIPOP 的定义。那么当应用运行这段代码时,如何在那些旧设备上解析变量呢?

【问题讨论】:

    标签: java android


    【解决方案1】:

    那么当应用运行这段代码时,如何在那些旧设备上解析变量?

    简单:没有变量。

    Build.VERSION_CODES.LOLLIPOPstatic final int。当您引用时,javac 生成的字节码将内联 intBuild.VERSION_CODES.LOLLIPOP,而不是在运行时查找该值。由于字节码包含int,您的APK 包含int,因此您无需依赖设备的框架版本来向您提供int

    Build.VERSION.SDK_INT 不是 static final int,因此 值是在运行时查找的。​​p>

    【讨论】:

    • 修正:Build.VERSION.SDK_INTstatic final int。但它的值取决于system property,因此必须在运行时计算,而Build.VERSION_CODES.LOLLIPOP 只是int
    猜你喜欢
    • 2016-06-13
    • 2011-08-22
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多