Build.VERSION_CODES怎么可能有效?

Axi*_*xus 5 java android

我对Android API的内部工作感到困惑.

如果我的应用程序是针对Android 5.0编译的,则可以接受以下内容适用于运行Android 5.0及更高版本的设备:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 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,因此,值在运行时查找.

  • 修订:`Build.VERSION.SDK_INT`是[`static final int`](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.L_preview /android/os/Build.java#139).但它的价值取决于[系统属性](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.L_preview/android/os/Build.java #503)所以它必须在运行时计算,而`Build.VERSION_CODES.LOLLIPOP`只是一个[`int`](http://grepcode.com/file/repository.grepcode.com/java/ext/com .google.android /机器人/ 5.L_preview /机器人/ OS/Build.java#503). (2认同)