android - studio - version app
Estrategias para la compatibilidad con Honeycomb y versiones anteriores. (5)
Así que hemos visto la vista previa de SDK y las cosas nuevas y ordenadas como ActionBar y Fragments. Serán inevitables hacer muchas llamadas a métodos, así que, ¿qué estrategias existen para mantener una versión de la aplicación, que me permita usar todo lo nuevo pero también funciona en dispositivos con una versión 2.3 o inferior? Mi aplicación apunta a 1.5 - 2.3 en este momento.
Bueno, Google acaba de anunciar que Honeycomb será solo tableta: http://www.pcmag.com/article2/0,2817,2379271,00.asp
Por lo tanto, si su dispositivo solo está diseñado para dispositivos móviles, esto puede no ser un problema.
Convenientemente, Google Dianne Hackborne ha publicado una entrada de blog 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.
Es posible que el artículo de Reto Meier sobre compatibilidad con versiones anteriores sea útil, específicamente la sección titulada "Manejo de clases faltantes".
Todavía no he visto el SDK de Honeycomb, pero, como usted, espero que sea bastante fácil y sin complicaciones utilizar las nuevas funciones sin poner en peligro la compatibilidad con dispositivos más antiguos.
Las mismas API de fragmentos ahora están disponibles como una biblioteca estática para usar con versiones anteriores de Android; es compatible de nuevo con Android 1.6.
Hay algunos trucos que puede usar para ver si las diferentes API nuevas están disponibles para su aplicación. En general, probablemente querrá crear dos conjuntos alternativos de Actividades, uno que use las API nuevas y sofisticadas (ActionBar, Animators, etc.) y otro conjunto que no lo haga.
El siguiente código muestra cómo puede usar la captura de reflejo y excepción para determinar la disponibilidad de las API de Fragmento, y la verificación de la versión 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 diseño. Cuando haya Fragmentos disponibles, inflará cada diseño dentro de un Fragmento diferente, y donde no estén, probablemente querrá usar etiquetas <include>
para incrustar varios de ellos en un diseño de Actividad más complejo.
Puede encontrar un trabajo más detallado sobre cómo escribir el código para admitir la compatibilidad con versiones anteriores en Honeycomb aquí: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html
Ejemplo oficial de Android que te ayudará a lograr ActionBar de 1.6 a 4.x