2011-01-28 21 views
30

Così abbiamo visto l'anteprima di sdk e le nuove cose come ActionBar e Fragments. Fare molte chiamate al metodo sarà inevitabile per farne uso, quindi quali strategie ci sono per mantenere la versione 1 dell'app, che mi consentirà di utilizzare tutte le novità più snelle ma anche di lavorare su dispositivi con 2.3 o meno? La mia app punta da 1,5 a 2,3 al momento.Strategie per Honeycomb e retrocompatibilità

risposta

27

Le stesse API di frammento sono ora disponibili come static library da utilizzare con versioni precedenti di Android; è compatibile con Android 1.6.

Ci sono alcuni trucchi che è possibile utilizzare per vedere se le varie nuove API sono disponibili per la tua app. In generale, probabilmente vorrai creare due serie alternative di attività, una che usi le nuove fantasiose API (ActionBar, animatori, ecc.) E un'altra che non lo fa.

Il codice seguente mostra come utilizzare la riflessione e l'eccezione per rilevare la disponibilità delle API di Fragment e il controllo della versione per confermare se sono disponibili altre API Honeycomb.

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

In generale è possibile utilizzare le stesse definizioni di layout. Laddove sono disponibili frammenti, gonfierete ciascun layout all'interno di un frammento diverso, dove probabilmente non vorrete usare i tag <include> per incorporarli in un layout di attività più complesso.

Un lavoro di approfondimento attraverso di come scrivere il codice per supportare la compatibilità all'indietro su Honeycomb può essere trovato qui: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

+5

Anche se l'unica API aggiuntiva richiesta è la barra delle azioni, dare un'occhiata a una libreria che ho scritto che è un'estensione della libreria di compatibilità che aggiunge proprio questo. Fornisce un'unica API per la barra delle azioni e consente l'uso di un singolo tema. Puoi trovare maggiori informazioni su http://actionbarsherlock.com. –

2

È possibile trovare utile il numero article on backwards-compatibility di Reto Meier, in particolare la sezione "Gestione delle classi mancanti".

Devo ancora guardare l'SDK Honeycomb da solo ma, come te, spero che sia abbastanza semplice e senza problemi utilizzare le nuove funzionalità senza compromettere la compatibilità con i dispositivi meno recenti.

+1

controllare anche questo post, che dà più esempi di lavoro con più versioni della piattaforma: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp

+0

Ho letto entrambi, ma sembra che Honeycomb sarà più coinvolto, specialmente con cose come Fragments e ActionBar. Pensi che usare queste tecniche sarà sufficiente? –

3

Convenientemente, Dianne Hackborne di Google ha pubblicato a blog entry che copre questo argomento esatto. Google afferma che fornirà librerie statiche in modo che anche le versioni precedenti di Android possano utilizzare i frammenti.

Problemi correlati