如果我在我的应用程序中使用以下代码和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常量没有此类崩溃
谢谢!
答案 0 :(得分:2)
如果我在2.1设备上启动2.3编译版本,为什么没有例外?
因为GINGERBREAD
是一个整数,并且该值被内联到字节码中。您实际上并没有在运行时引用GINGERBREAD
最终静态数据成员。
例如,如果我在1.5设备上运行相同的程序,则会发生崩溃,因为Android无法找到仅在1.6中引入的SDK_INT常量。
Dalvik交叉编译器在1.6中变得更加复杂,导致我在上面引用的优化。