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常量没有这样的崩溃

谢谢!

为什么在2.1设备上启动2.3编译版没有异常?

因为GINGERBREAD是一个整数,该值被内联到字节码中。在运行时,您并没有真正引用GINGERBREAD final静态数据成员。

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

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

最新更新