2011-01-28 2 views
30

Nous avons donc vu la prévisualisation sdk et les nouvelles fonctionnalités comme ActionBar et Fragments. Faire beaucoup d'appels de méthodes sera inévitable à utiliser, alors quelles sont les stratégies pour maintenir 1 version de l'application, ce qui me permettra d'utiliser toutes les nouveautés, mais aussi sur les appareils fonctionnant sous 2.3 ou moins? Mon application cible de 1,5 à 2,3 pour le moment.Stratégies pour Honeycomb et rétrocompatibilité

Répondre

27

Les mêmes API fragment sont maintenant disponibles en tant que static library pour une utilisation avec les anciennes versions d'Android; C'est compatible avec Android 1.6.

Vous pouvez utiliser quelques astuces pour voir si les différentes nouvelles API sont disponibles pour votre application. D'une manière générale, vous souhaiterez probablement créer deux autres jeux d'activités, l'un utilisant les nouvelles API fantaisistes (ActionBar, Animators, etc.), et l'autre non.

Le code suivant montre comment utiliser la réflexion et la capture d'exception pour déterminer la disponibilité des API de fragmentation et vérifier la version pour vérifier si les autres API Honeycomb sont 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(); 
    } 

De manière générale, vous pouvez utiliser les mêmes définitions de disposition. Là où les fragments sont disponibles, vous allez gonfler chaque mise en page dans un fragment différent, où ils ne sont pas, vous voudrez probablement utiliser les balises <include> pour en intégrer plusieurs dans une mise en page d'activité plus complexe.

Un travail plus détaillé par la façon d'écrire le code pour soutenir la rétrocompatibilité sur Honeycomb se trouve ici: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

+5

Aussi, si la seule API supplémentaire dont vous avez besoin est la barre d'action, jetez un oeil à une bibliothèque que j'ai écrite qui est une extension de la bibliothèque de compatibilité qui ajoute juste cela. Il fournit une seule API pour la barre d'action et permet également l'utilisation d'un seul thème. Vous pouvez trouver plus d'informations sur http://actionbarsherlock.com. –

2

Vous trouverez peut-être utile la section article on backwards-compatibility de Reto Meier, en particulier la section intitulée «Traitement des classes manquantes». Je n'ai pas encore regardé le SDK Honeycomb mais moi, comme vous, j'espère qu'il est assez facile et sans tracas d'utiliser les nouvelles fonctionnalités sans compromettre la compatibilité avec les anciens appareils.

+1

Vérifiez également ce post, qui donne plus d'exemples de travail avec plusieurs versions de plate-forme: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp

+0

J'ai lu les deux, mais il semble que Honeycomb sera plus impliqué, en particulier avec des choses comme Fragments et le ActionBar. Pensez-vous que l'utilisation de ces techniques sera suffisante? –

3

Commodément, Google Dianne Hackborne a posté a blog entry couvrant ce sujet exact. Google indique qu'ils fourniront des bibliothèques statiques afin que les anciennes versions d'Android puissent également utiliser des fragments.