2011-07-06 61 views
1

如果我的應用程序和Android 2.1庫一起使用下面的代碼,我的應用程序將無法編譯,因爲GINGERBREAD變量不可見。android操作系統版本兼容性如何工作?

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

爲什麼沒有例外,如果我在2.1設備上啓動2.3編譯構建?

因爲GINGERBREAD是一個整數,並且該值被內聯到字節碼中。您在運行時並未真正引用最終靜態數據成員GINGERBREAD

例如,如果我在1.5設備上運行相同的程序,會發生崩潰,因爲Android無法找到僅在1.6中引入的SDK_INT常量。

Dalvik交叉編譯器在1.6中變得更加複雜,導致我在上面引用的優化。

+0

謝謝,現在我明白了。 – Zzokk

相關問題