android OS版本兼容性如何工作?

时间:2011-07-06 15:49:19

标签: android

如果我在我的应用程序中使用以下代码和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常量没有此类崩溃

谢谢!

1 个答案:

答案 0 :(得分:2)

  

如果我在2.1设备上启动2.3编译版本,为什么没有例外?

因为GINGERBREAD是一个整数,并且该值被内联到字节码中。您实际上并没有在运行时引用GINGERBREAD最终静态数据成员。

  

例如,如果我在1.5设备上运行相同的程序,则会发生崩溃,因为Android无法找到仅在1.6中引入的SDK_INT常量。

Dalvik交叉编译器在1.6中变得更加复杂,导致我在上面引用的优化。