2011-01-28 10 views
30

Así que hemos visto la vista previa de SDK y las cosas nuevas como ActionBar y Fragments. Hacer muchas llamadas de método será inevitable para hacer uso de esto, entonces, ¿qué estrategias hay para mantener una versión de la aplicación, que me permitirá usar todas las cosas nuevas y elegantes, pero también funcionar en dispositivos con 2.3 o menos? Mi aplicación apunta a 1.5 - 2.3 en este momento.Estrategias para Honeycomb y compatibilidad con versiones anteriores

Respuesta

27

Las mismas API de fragmentos están ahora disponibles como static library para su uso con versiones anteriores de Android; es compatible de nuevo con Android 1.6.

Hay algunos trucos que puede utilizar para ver si las diversas nuevas API están disponibles para su aplicación. En términos generales, es probable que desee crear dos conjuntos de actividades alternativos, uno que use las nuevas y sofisticadas API (ActionBar, Animators, etc.) y otro conjunto que no lo haga.

El siguiente código muestra cómo puede usar la captura de reflexión y excepciones para determinar la disponibilidad de las API de fragmentos y la verificación de versiones para confirmar si las otras API de Honeycomb están disponibles.

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(); 
    } 

En general, puede utilizar las mismas definiciones de disposición. Donde estén disponibles los Fragmentos, inflarás cada diseño dentro de un Fragmento diferente, donde no es probable que desees usar las etiquetas <include> para incrustar varias de ellas en un diseño de la Actividad más complejo.

Un trabajo más detallado a través de la forma de escribir el código para apoyar la compatibilidad hacia atrás en el panal se puede encontrar aquí: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

+5

Además, si la única API adicional que necesita es la barra de acciones, eche un vistazo a la biblioteca que he escrito, que es una extensión de la biblioteca de compatibilidad, que solo agrega eso. Proporciona una única API para la barra de acciones y también permite el uso de un único tema. Puede encontrar más información en http://actionbarsherlock.com. –

2

Puede ser útil el Reto Meier's article on backwards-compatibility, específicamente la sección titulada "Manejo de clases faltantes".

Todavía tengo que mirar el SDK de Honeycomb pero, como usted, espero que sea bastante fácil y sin complicaciones usar las nuevas funciones sin poner en peligro la compatibilidad con dispositivos más antiguos.

+1

También puedes ver este post, que da más ejemplos de cómo trabajar con múltiples versiones de plataforma: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp

+0

He leído ambos, pero parece que Honeycomb estará más involucrado, especialmente con cosas como Fragments y ActionBar. ¿Crees que usar estas técnicas será suficiente? –

3

Convenientemente, Google's Dianne Hackborne ha publicado a blog entry que cubre este tema exacto. Google dice que proporcionarán bibliotecas estáticas para que las versiones anteriores de Android también puedan usar fragmentos.

Cuestiones relacionadas