我对Android API的内部工作感到困惑。
如果我的应用是针对Android 5.0编译的,则可以接受以下内容适用于运行Android 5.0及更高版本的设备:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
但是,如果我在运行旧版Android的设备上运行它,这仍然有效。我的假设是该设备上的库没有变量Build.VERSION_CODES.LOLLIPOP
的定义。那么当应用程序运行此代码时,如何在这些旧设备上解析变量?
答案 0 :(得分:14)
那么当应用程序运行此代码时,如何在这些旧设备上解析变量?
简单:没有变量。
Build.VERSION_CODES.LOLLIPOP
是static final int
。 javac
生成的字节码会在您引用时内联int
值
Build.VERSION_CODES.LOLLIPOP
,而不是在运行时查找该值。由于字节码包含int
,因此您的APK包含int
,因此您不依赖于设备版本的框架来向您提供int
。
Build.VERSION.SDK_INT
不一个static final int
,因此在运行时查找值。