2011-01-28 79 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也将能够使用片段。