在Android中很多次,您會發現3.0版本中已經棄用了一種方法,應該使用不同的方法。已棄用/已更換的方法,您如何定位所有版本?
如果您針對大多數設備(例如版本2.1),在編寫應用程序時如何處理此類事情。您是否爲不同的版本多次編碼同一個應用程序?然後在Google Play中爲每個APK創建不同的配置文件?我覺得這有點過分,沒有道理。請讓我知道什麼是處理這種情況
感謝
在Android中很多次,您會發現3.0版本中已經棄用了一種方法,應該使用不同的方法。已棄用/已更換的方法,您如何定位所有版本?
如果您針對大多數設備(例如版本2.1),在編寫應用程序時如何處理此類事情。您是否爲不同的版本多次編碼同一個應用程序?然後在Google Play中爲每個APK創建不同的配置文件?我覺得這有點過分,沒有道理。請讓我知道什麼是處理這種情況
感謝
最簡單的方法是簡單地檢查您的應用程序上做相應運行的是什麼版本的正確方法。即
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
[code for HC and up]
} else {
[code for older versions]
}
你可以找到所有版本的代碼here。請記住,您需要使用targetSdk
設置爲最新版本來構建應用。然而,這是有風險的,因爲您可以輕鬆使用舊版平臺上不可用的方法,並且由於編譯器不會警告您,您的應用程序會崩潰。爲了緩解這種情況,通常有助於注意你在使用什麼:)而且將這些「有風險」的代碼包裝到庫或者實用程序類中,這樣你就可以確定沒有其他代碼可以單獨欺騙你。它還有助於在文檔中設置API過濾器http://d.android.com/(左側標題欄上的這些小型上/下箭頭,位於「Android APIs 」旁邊)至LOWEST版本您計劃支持的版本。如果它不經常使用,你偷看偶然有趕風險「視覺」
還有的還Eclipse插件,做這種檢查,但我不使用它自己,此刻也不會記得它的名字。
哦,不,我們不要」 t創建多個應用程序
第一個解決方案將檢查這是哪個android版本,並相應地採取行動:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){
//do something
} else {
//do something else
}
的第二溶液,基於所述第一個,是創建一個抽象類定義了基本功能,並與特定於版本的實施方式的子類。 抽象類檢查版本並創建所需的子實例。 您只需在需要時調用抽象方法即可。 Read more about it。
第一種解決方案適用於小任務。第二種更適合更復雜的情況(例如使用tabHost與新標籤導航模式)。
謝謝你的建議。這確實是有道理的接受!然而,我有一個問題(原諒我的愚蠢),如果我將上面的代碼片段放在我的代碼中,並且有人試圖在舊版本中運行APK,那麼應用程序不會在啓動時崩潰,因爲有爲新版本編寫的代碼舊手機中還不存在這樣的問題(即使代碼沒有執行)! – Snake
不,你是安全的,因爲我們得到了'if()'(它不依賴於API),所以如果條件沒有滿足(這意味着比HC更老的API),HC字節碼將不會被執行。這裏的技巧是你用'targetSdk'設置儘可能高的編譯,所以編譯器知道如何處理你的HC API代碼,但同時我們得到if()以確保代碼不會在平臺上執行不知道如何處理它(這會導致崩潰 - 只需嘗試並移除if()')。 –
ohhhh我明白這就是爲什麼你說targetSdk的構建儘可能高。非常感謝信息:) – Snake