为什么android.os.Build.VERSION_CODES可以在旧平台上运行

FD_*_*FD_ 4 android version adt

正如这个问题所指出的那样,我做了一些测试,android.os.Build.VERSION_CODES研究的平台版本比VERSION_CODE您正在使用的平台版本更旧.

例如:

android.os.Build.VERSION_CODES.HONEYCOMB
Run Code Online (Sandbox Code Playgroud)

虽然Honecomb是 Gingerbread 之后发布的,但也适用于Gingerbread设备.

这似乎只有在您的目标SDK晚于您使用的VERSION_CODE时才有效,这使我得知版本代码以某种方式从目标SDK编译到APK中.

现在,我的问题是:

这是如何运作的?根据链接问题的接受答案,这通过int别名起作用,但Java似乎不支持别名.

laa*_*lto 9

它是一个编译时常量,它在生成的字节码中内联.因此,符号不需要在运行时解析.

编译时常量就是这样

  • 声明 final
  • 原始的或 String
  • 在声明中初始化
  • 常量表达式初始化


Nas*_*eek 5

这些VERSION_CODES都是静态的最终整数,这意味着当您构建应用程序时,所有变量都只是用数字替换.基本上,如果您在编译后查看应用程序的字节码,您可能会看到对VERSION_CODES刚刚替换为int每个版本代码变量所代表的实际内容的任何引用.