2012-11-11 78 views
0

有各種各樣的存儲在android.os.Build類,您可以檢查給定的Android平臺的最新版本的變量。當然,這些只能在仿真器或設備中工作,因爲在編譯過程中SDK返回null或0的Android SDK版本在編譯時

Android SDK中是否有其他可用的變量表示在編譯期間可通過Java API獲得的當前SDK版本?

僅供參考,我想實現這個功能:https://github.com/johncarl81/transfuse/issues/18

感謝。

+1

你說的是Android上正在使用的Davlik VM「提供的編譯器/ Java虛擬機內」是什麼意思? –

+0

您首先在常規Java編譯器中編譯Android Java代碼。這會生成Java Bytecode,然後由Android sdk轉換爲Dalvik Bytecode。我的意思是在編譯階段有一個版本號,當Android Java被轉換爲Java字節碼時。 –

+0

對不起,我不理解你的問題。我並不知道不同Davik版本之間字節碼的主要區別(至少對於App開發者來說)。你有想知道的原因嗎?或者我錯過了你的觀點。 –

回答

0

如果你想設置一個最低水平的SDK,可以在AndroidManifest.xml文件來完成。如果您想支持多個SDK級別,則必須在運行時執行此操作,因爲它暗示在您實際運行應用程序之前,您不知道是否正在運行SDK 8或SDK 15。如果你想避免皮棉警告,我會用@TargetApi(...)是opatut引用......

+0

所以,這是主意。由於我可以將多個支持版本上傳到市場,因此我可以爲每個API級別編譯不同的版本。如果我可以爲每個API級別編譯不同的版本,那麼我可以爲每個我上傳的版本使用不同的代碼或類。我想要做的是在我的自定義Annotation處理器庫(編譯器擴展)中利用API級別來引用一個組件類或另一個基於API級別的組件類。我敢打賭,我可以在Maven中設置一個變量,但我想知道是否有更多的與構建系統無關的方法。似乎答案可能不是。 –

+1

由於您不知道設備是否升級,您仍然需要執行運行時檢查以確定您所在的操作系統級別。任何構建系統/框架都需要考慮到這一點。 –

+0

你說的對。我沒有考慮升級。我不知道這個功能是否仍然適用於運行時的if語句。也許我可以根據註釋生成這個。如你指出的其他問題所述。 –