如果我在我的应用程序中使用以下代码与Android 2.1库一起使用,我的应用程序将无法编译,因为GINGERBREAD变量不可见。
public static boolean SUPPORTS_GINGERBREAD = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD;
另一方面,如果使用2.3库而不是2.1,我的应用程序被编译并成功运行在2.1设备上。
为什么在2.1设备上启动2.3编译版没有异常?
例如,如果我在1.5设备上运行相同的程序,则会出现崩溃,因为Android无法找到仅在1.6中引入的SDK_INT常量。注意,在Android 2.3中引入的GINGERBREAD常量没有这样的崩溃
谢谢!
为什么在2.1设备上启动2.3编译版没有异常?
因为GINGERBREAD
是一个整数,该值被内联到字节码中。在运行时,您并没有真正引用GINGERBREAD
final静态数据成员。
例如,如果我在1.5设备上运行相同的程序,会出现崩溃,因为Android无法找到仅在1.6中引入的SDK_INT常量。
Dalvik交叉编译器在1.6中变得更加复杂,导致了我上面引用的优化。