2011-01-28 34 views
30

所以我們已經看到預覽SDK和像ActionBar和Fragments這樣整潔的新東西。做很多方法調用將不可避免地使用這些,所以有什麼策略來維護1版本的應用程序,這會讓我使用所有時髦的新東西,但也可以在運行2.3或更低版本的設備上工作?我的應用程序目前的目標是1.5 - 2.3。針對蜂窩和向後兼容的策略

回答

27

現在可以使用相同的片段API作爲static library用於較舊版本的Android;它與Android 1.6相兼容。

您可以使用一些技巧來查看各種新的API是否可用於您的應用。一般來說,你可能想要創建兩個可選的活動集,一個使用新奇的API(ActionBar,Animators等) - 另一個不使用。

以下代碼顯示瞭如何使用反射和異常捕獲來確定Fragment API的可用性以及版本檢查以確認其他Honeycomb API是否可用。

private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10; 

    private static boolean fragmentsSupported = false; 

    private static void checkFragmentsSupported() throws NoClassDefFoundError { 
    fragmentsSupported = android.app.Fragment.class != null; 
    } 

    static { 
    try { 
     checkFragmentsSupported(); 
    } catch (NoClassDefFoundError e) { 
     fragmentsSupported = false; 
    } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent startActivityIntent = null; 
    if (!shinyNewAPIsSupported) 
     startActivityIntent = new Intent(this, MainNonActionBarActivity.class); 
    else 
     startActivityIntent = new Intent(this, MainActionActivity.class); 

    startActivity(startActivityIntent); 
    finish(); 
    } 

一般而言,您可以使用相同的佈局定義。在可用碎片的情況下,您可以在不同的碎片中對每個佈局進行膨脹,在這種情況下,您可能不希望使用<include>標籤將其中幾個嵌入到更復雜的活動佈局中。通過對如何編寫代碼來支持蜂窩向後兼容性

更詳細的工作可以在這裏找到:http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

2

您可能會發現Reto Meier的article on backwards-compatibility有用,特別是「處理失蹤班」一節。

我還沒有親自看過Honeycomb SDK,但我和你一樣,希望能夠在不損害與舊設備的兼容性的情況下使用新功能非常簡單和無憂。

+1

還檢查了這個職位,這給出了更多使用多個平臺版本的示例:http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp 2011-01-28 20:06:17

+0

我讀過他們兩個,但它看起來像蜂窩將更多地參與,尤其是像碎片和ActionBar的東西。你認爲使用這些技術就足夠了嗎? – 2011-02-01 21:23:12

3

方便地,Google的Dianne Hackborne已發佈a blog entry涵蓋此確切主題。谷歌表示他們將提供靜態庫,因此老版本的Android也將能夠使用片段。