Creare più APK per schermi di dimensioni diverse

Se pubblichi la tua app su Google Play, devi creare e caricare un Android App Bundle. Quando lo fai, Google Play automaticamente genera e pubblica APK ottimizzati per la configurazione del dispositivo di ogni utente, in modo che vengano scaricati solo il codice e le risorse di cui hanno bisogno per eseguire l'app. La pubblicazione di più APK è utile se Non pubblichi su Google Play, ma devi creare, firmare e gestire ogni APK autonomamente.

Durante lo sviluppo di un'applicazione Android per sfruttare diversi APK su Google Play, è importante adottare alcune best practice fin dall'inizio ed evitare inutili mal di testa nel corso del processo di sviluppo. Questa lezione mostra come creare più APK del tuo ciascuna app, ognuno con una classe diversa di dimensioni dello schermo. Avrai anche alcuni strumenti necessari per rendere il più semplice possibile gestire un codebase più APK.

Conferma di aver bisogno di più APK

Quando cerchi di creare un'applicazione che funzioni su più dimensioni di dispositivi Android, è naturale che tu voglia che l'applicazione utilizzi tutto lo spazio disponibile sui dispositivi più grandi, senza sacrificare la compatibilità o l'usabilità sugli schermi più piccoli. All'inizio può sembrare che il supporto di più APK è la soluzione migliore, ma spesso non è così. L'APK Utilizzo singolo La sezione della guida per gli sviluppatori relativa a più APK include alcune informazioni utili su come può farlo con un singolo APK, incluso l'uso della nostra libreria di supporto. Dovresti leggere anche al supporto di più schermi, ed è disponibile anche una raccolta di dati di supporto puoi scaricare usando l'SDK per Android, che ti consente di utilizzare frammenti sui dispositivi pre-Honeycomb (facendo il supporto di più schermi in un unico APK).

Se sei in grado di gestirlo, limitare l'applicazione a un singolo APK offre diversi vantaggi, tra cui:

  • La pubblicazione e i test sono più semplici
  • Devi gestire un'unica base di codice
  • L'applicazione può adattarsi alle modifiche alla configurazione del dispositivo
  • Il ripristino delle app su più dispositivi funziona correttamente
  • Non devi preoccuparti delle preferenze di mercato, del comportamento degli "upgrade" da un APK successivo o quale APK si abbina alla classe di dispositivi

Per il resto della lezione si presuppone che tu abbia esaminato l'argomento e assorbito con attenzione i materiale nelle risorse collegate e stabilito che più APK rappresentano la soluzione adatta un'applicazione.

Crea un grafico dei requisiti

Inizia creando un semplice grafico per determinare rapidamente quanti APK ti servono e quale schermata dimensioni coperte da ciascun APK. Fortunatamente, è facile creare un elenco rapido dei tuoi requisiti e ti forniremo un riferimento per un secondo momento. Inizia con una riga di celle che rappresenta le varie dimensioni dello schermo disponibili sulla piattaforma Android.

piccole normale grande xlarge

Ora solo i colori nel grafico fanno in modo che ogni colore rappresenti un APK. Ecco un esempio di come potresti applicare ogni APK a un determinato intervallo di dimensioni dello schermo.

piccole normale grande xlarge

A seconda delle tue esigenze, puoi anche avere due APK, "small e tutto il resto" o "xlarge e tutto il resto". Colorare il grafico semplifica inoltre la comunicazione all'interno del team: Ora ti basta fare riferimento a ciascun APK come "blu", "verde" o "rosso", indipendentemente dal numero di tipi di schermo diversi che copre.

Inserisci tutto il codice e le risorse comuni in un progetto libreria

Che tu stia modificando un'applicazione Android esistente o ne stia iniziando una da zero, questa è la prima cosa che devi fare al codice di base e di gran lunga la più importante. Tutto che entra nel progetto della biblioteca deve essere aggiornato una sola volta (pensa alle stringhe localizzate in varie lingue, temi a colori, bug corretti nel codice condiviso), che migliora i tempi di sviluppo e riduce probabilità di errori che avrebbero potuto essere facilmente evitati.

Nota:sebbene i dettagli di implementazione relativi a come creare progetti libreria non rientrano nell'ambito di questa lezione, puoi approfondire consulta l'articolo Creare una Raccolta Android.

Se vuoi convertire un'applicazione esistente al supporto di più APK, esaminare il codebase alla ricerca di ogni file stringa localizzato, elenco di valori, i colori, le icone dei menu e il layout che non cambieranno da un APK all'altro, nel progetto biblioteca. Il codice che non cambierà molto dovrebbe nel progetto Biblioteche. Probabilmente ti capiterà di estendere questi per aggiungere uno o due metodi dall'APK all'APK.

Se, d'altra parte, crei l'applicazione da zero, prova come scrivere il codice prima nel progetto libreria, quindi spostarlo solo verso il basso un singolo APK, se necessario. È molto più facile da gestire nel lungo periodo rispetto ad una semplice aggiunta un'altra ancora, un'altra e poi mesi dopo, cercando di capire se questo blob può essere spostato più in alto alla sezione della biblioteca senza rovinare nulla.

Creare nuovi progetti APK

Deve essere presente un progetto Android separato per ogni APK da rilasciare. Per semplificare dell'organizzazione, inserisci il progetto libreria e tutti i progetti APK correlati nella stessa cartella principale. Inoltre, ricorda che ogni APK deve avere lo stesso nome del pacchetto, anche se non necessariamente deve condividerlo con la libreria. Se hai tre APK che seguono lo schema descritto in precedenza, la directory root potrebbe avere il seguente aspetto:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

Una volta creati i progetti, aggiungi il progetto libreria come riferimento a ogni progetto APK. Se possibile, definisci l'attività iniziale nel progetto della libreria ed estendi quell'attività nell'APK progetto. Avere un'attività iniziale definita nel progetto della biblioteca ti dà la possibilità di mettere tutti l'inizializzazione dell'applicazione in un unico posto, in modo che ogni singolo APK non debba reimplementare il valore "universale" come l'inizializzazione di Analytics, l'esecuzione dei controlli delle licenze e qualsiasi altra procedure di inizializzazione che non cambiano molto da APK ad APK.

Modificare i manifest

Quando un utente scarica un'applicazione che utilizza più APK tramite Google Play, l'applicazione corretta L'APK da utilizzare viene scelto tramite due semplici regole:

  • Il file manifest deve indicare che un determinato APK è idoneo.
  • Tra gli APK idonei, vince il numero di versione più alto

Prendiamo come esempio l'insieme di diversi APK descritti in precedenza e che ogni APK è stata impostata per supportare schermi di tutte le dimensioni più grandi di quelle del target "target". dimensioni dello schermo. Foto scattate singolarmente, l'intervallo possibile di ogni APK sarebbe simile al seguente:

piccole normale grande xlarge
piccole normale grande xlarge
piccole normale grande xlarge

Se però usi il "numero di versione più alto vince", regola, se impostiamo l'attributo versionCode in in ciascun APK in modo tale che rosso ≥ verde ≥ blu, il grafico si comprime effettivamente fino a questo punto:

piccole normale grande xlarge

Supponiamo inoltre che l'APK rosso abbia alcuni requisiti che non sono presenti negli altri due. La Pagina Filtri su Google Play di Android La guida per gli sviluppatori ha un intero elenco di possibili colpe. A titolo di esempio, supponiamo che il colore rosso richiede una fotocamera anteriore. Infatti, l'intero punto dell'APK rosso è l'utilizzo di spazio disponibile sullo schermo per svolgere attività di intrattenimento con la fotocamera anteriore. Ma, a quanto pare, nemmeno tutti i dispositivi xLarge HANNO fotocamere frontali! Orrore!

Fortunatamente, se un utente naviga su Google Play da un dispositivo di questo tipo, Google Play esaminerà il puoi vedere che Red indica come requisito la fotocamera anteriore e ignorarla tranquillamente, ha stabilito che Red e questo dispositivo non sono un abbinamento perfetto. Noterà che Il verde non è solo compatibile con i dispositivi x large, ma non è importante anche se c'è o meno una fotocamera anteriore. L'app può comunque essere scaricata dall'utente da Google Play, perché nonostante l'incidente con la fotocamera anteriore, esisteva ancora un APK che supportava quella determinata dimensione dello schermo.

Per mantenere tutti gli APK in "canali di controllo" separati, è importante avere un codice di versione valido . Quello consigliato si trova nell'area Codici versione della nostra guida per gli sviluppatori. Poiché l'insieme di APK di esempio riguarda solo uno dei tre possibili , sarebbe sufficiente separare ciascun APK per 1000 e incrementare da lì. Questo potrebbe avere il seguente aspetto:

Blu: 1001, 1002, 1003, 1004…
Verde: 2001, 2002, 2003, 2004...
Rosso:3001, 3002, 3003, 3004...

Riassumendo, i manifest Android avranno probabilmente un aspetto simile al seguenti:

Blu:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Verde:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Rosso:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

Tieni presente che, tecnicamente, più APK funzioneranno con le due schermate supportate. o il tag delle schermate compatibili. In genere è preferibile usare le schermate di supporto, e di solito è una pessima idea usare entrambi i tag nello stesso manifest. it rende le cose inutilmente complicate e aumenta il rischio di errori. Inoltre, tieni presente che, invece di sfruttare i valori predefiniti (piccoli e normal sono sempre true per impostazione predefinita), i manifest impostano esplicitamente il valore per ogni dimensione dello schermo. In questo modo potrai evitare problemi in futuro. Ad esempio, un manifest con un SDK target di < 9 comporterà l'impostazione automatica di xlarge su false, poiché quella dimensione non esisteva ancora. Quindi sii esplicito.

Esaminare l'elenco di controllo pre-lancio

Prima di caricare l'app su Google Play, controlla i seguenti elementi. Ricorda che si tratta pertinenti per più APK e non rappresentano in alcun modo un elenco di controllo completo per tutti applicazioni caricate su Google Play.

  • Tutti gli APK devono avere lo stesso nome del pacchetto
  • Tutti gli APK devono essere firmati con lo stesso certificato
  • Imposta il valore true nel file manifest di tutte le dimensioni dello schermo supportate dall'APK. Ogni dimensione dello schermo vuoi evitare, impostalo su false
  • Controlla attentamente che i filtri manifest non contengano informazioni in conflitto (un APK che supporta solo Cupcake su schermi XLARGE non verrà visto da nessuno)
  • Il file manifest di ogni APK deve essere univoco per almeno una delle seguenti proprietà supportate: schermo, texture OpenGL o versione della piattaforma
  • Prova a testare ogni APK su almeno un dispositivo. In caso contrario, sulla tua macchina di sviluppo hai uno degli emulatori di dispositivi più personalizzabili in circolazione. Scatenati!

È opportuno controllare anche l'APK compilato prima di metterlo sul mercato, per assicurarti che non ci siano eventuali sorprese che potrebbero nascondere la tua applicazione su Google Play. È un processo molto semplice, utilizzando "aapt" lo strumento a riga di comando gcloud. Aapt (Android Asset Packaging Tool) fa parte del processo di creazione per creare e pacchettizzare le applicazioni Android ed è anche uno strumento molto utile per ispezionarle.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

Quando esamini l'output aapt, accertati di non avere valori in conflitto per supporti schermi e schermi compatibili e che non disponi di "uses-feature" involontario valori aggiunte in seguito alle autorizzazioni che hai impostato nel manifest. Nell'esempio precedente, l'APK non sarà visibile alla maggior parte dei dispositivi, se non a tutti.

Perché? Aggiungendo l'autorizzazione SEND_SMS richiesta, è stato aggiunto implicitamente il requisito delle funzionalità di android.hardware.telephony. Poiché la maggior parte dei dispositivi di grandi dimensioni (se non tutti) sono tablet senza hardware per la telefonia, in questi casi Google Play filtrerà questo APK, finché non saranno disponibili dispositivi futuri che siano entrambi sufficientemente grandi da essere indicati come schermi di dimensioni molto grandi e dotati di hardware per la telefonia.

Fortunatamente, questo problema si risolve facilmente aggiungendo al tuo manifest:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

Anche il requisito android.hardware.touchscreen viene aggiunto implicitamente. Se vuoi che l'APK sia visibile sulle TV che non sono dispositivi touchscreen, devi aggiungere quanto segue al file manifest:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

Una volta completato l'elenco di controllo pre-lancio, carica gli APK su Google Play. Potrebbe volerci un po' prima che l'applicazione venga visualizzata mentre navighi su Google Play, ma quando un'ultima verifica. Scarica l'applicazione su eventuali dispositivi di test per assicurarti che gli APK abbiano come target i dispositivi previsti.

Per ulteriori informazioni sulla pubblicazione di più APK su Google Play, leggi Supporto di più APK.