bundletool è lo strumento sottostante che Android Studio, il plug-in Android Gradle
e Google Play utilizzano per creare un Android App Bundle. bundletool
può convertire un app bundle nei vari APK di cui viene eseguito il deployment sui dispositivi.
I bundle SDK Android (ASB) e i relativi APK sono creati con bundletool. È disponibile anche come strumento a riga di comando, in modo da poter creare autonomamente app bundle e SDK bundle e ricreare la build lato server di Google Play degli APK della tua app o degli APK del tuo SDK abilitato per l'esecuzione.
Scarica bundletool
Se non l'hai ancora fatto, scarica bundletool dal
repository GitHub.
Creare e testare un app bundle
Puoi utilizzare Android Studio o lo strumento a riga di comando bundletool per creare l'Android App Bundle e poi testare la generazione di APK da questo app bundle.
Crea un app bundle
Utilizza Android Studio e il plug-in Android Gradle per
creare e firmare un Android App Bundle.
Tuttavia, se l'utilizzo dell'IDE non è un'opzione, ad esempio perché utilizzi
un server di compilazione continua, puoi anche
creare il tuo app bundle dalla riga di comando
e firmarlo utilizzando
jarsigner.
Per saperne di più sulla creazione di app bundle con bundletool,
consulta
Creare un app bundle utilizzando bundletool.
Generare un insieme di APK dal tuo app bundle
Dopo aver creato l'Android App Bundle, verifica in che modo Google Play lo utilizza per generare APK e come si comportano questi APK quando vengono implementati su un dispositivo.
Esistono due modi per testare l'app bundle:
- Utilizza lo strumento a riga di comando
bundletoolin locale. - Carica il bundle su Play Console tramite Google Play utilizzando un gruppo di test.
Questa sezione spiega come utilizzare bundletool per testare localmente l'app bundle.
Quando bundletool genera APK dal tuo app bundle, include gli APK generati in un contenitore chiamato archivio di set di APK, che utilizza l'estensione del file .apks. Per generare un set di APK per tutte le configurazioni dispositivo supportate dalla tua app dal tuo app bundle, utilizza il comando bundletool build-apks, come mostrato di seguito:
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Se vuoi eseguire il deployment degli APK su un dispositivo, devi includere anche le informazioni di firma dell'app, come mostrato nel seguente comando. Se non specifichi
le informazioni di firma, bundletool tenta di firmare gli APK con una chiave di debug
per te.
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks --ks=/MyApp/keystore.jks --ks-pass=file:/MyApp/keystore.pwd --ks-key-alias=MyKeyAlias --key-pass=file:/MyApp/key.pwd
La tabella seguente descrive in modo più dettagliato i vari flag e le opzioni che puoi impostare quando
utilizzi il comando bundletool build-apks:
Tabella 1. Opzioni per il comando
bundletool build-apks
| Segnala | Descrizione |
|---|---|
--bundle=path |
(Obbligatorio) Specifica il percorso del bundle dell'app che hai creato utilizzando Android Studio. Per saperne di più, leggi Creare il progetto. |
--output=path |
(Obbligatorio) Specifica il nome del file
.apks di output, che contiene tutti gli artefatti APK per la tua
app. Per testare gli artefatti in questo file su un dispositivo, segui i passaggi nella
sezione su come eseguire il deployment degli APK
su un dispositivo connesso.
|
--overwrite |
Sovrascrive qualsiasi file di output esistente con
il percorso specificato utilizzando l'opzione --output. Se
non includi questo flag e il file di output esiste già, si verifica un
errore di compilazione.
|
--aapt2=path |
Specifica un percorso personalizzato per AAPT2.
Per impostazione predefinita, bundletool include la propria versione di AAPT2.
|
--ks=path |
(Facoltativo) Specifica il percorso del keystore di distribuzione utilizzato per
firmare gli APK. Se non includi questo flag,
bundletool tenta di firmare gli APK con una chiave di firma di debug.
|
--ks-pass=pass:password o --ks-pass=file:/path/to/file |
Specifica la password dell'archivio chiavi. Se
specifichi una password in testo normale, qualificala con pass:.
Se trasmetti il percorso a un file contenente la password, qualificalo
con file:. Se specifichi un keystore utilizzando
il flag --ks senza specificare --ks-pass,
bundletool ti chiede una password dalla riga di comando.
|
--ks-key-alias=alias |
Specifica l'alias della chiave di firma che vuoi utilizzare. |
--key-pass=pass:password o --key-pass=file:/path/to/file |
Specifica la password per la chiave di firma. Se
specifichi una password in testo normale, qualificala con pass:.
Se trasmetti il percorso a un file contenente la password, qualificalo
con file:. Se questa password è identica a quella del keystore stesso, puoi omettere questo flag. |
--connected-device |
Indica a bundletool di creare APK che hanno come target la
configurazione di un dispositivo connesso. Se non includi questo flag,
bundletool genera APK per tutte le configurazioni di dispositivi supportate dalla tua app.
|
--device-id=serial-number |
Se hai più di un dispositivo connesso, utilizza questo flag per specificare l'ID seriale del dispositivo su cui vuoi eseguire il deployment dell'app. |
--device-spec=spec_json |
Fornisce un percorso a un
file .json che specifica la configurazione del dispositivo di cui vuoi
eseguire il targeting. Per saperne di più, vai alla sezione su come
generare e utilizzare i file JSON di specifica del dispositivo.
|
--mode=universal |
Imposta la modalità su universal. Utilizza questa opzione se vuoi
bundletool creare un singolo APK che includa tutto il codice e le risorse della tua app, in modo che l'APK sia compatibile con tutte le configurazioni dei dispositivi supportate dalla tua app.
Nota: Tieni presente che questi APK sono più grandi di quelli ottimizzati per una particolare configurazione del dispositivo. Tuttavia, sono più facili da condividere con i tester interni che, ad esempio, vogliono testare la tua app su più configurazioni di dispositivi. |
--local-testing
|
Consente il test locale dell'app bundle.
I test locali consentono cicli di test rapidi e iterativi senza la necessità
di caricare sui server di Google Play.
Per un esempio di come testare l'installazione del modulo utilizzando il
flag |
Deployment di APK su un dispositivo connesso
Dopo aver generato un insieme di APK, bundletool può eseguire il deployment della combinazione
di APK corretta dall'insieme a un dispositivo connesso.
Ad esempio, se hai un dispositivo connesso con Android 5.0 (livello API 21)
o versioni successive, bundletool esegue il push dell'APK di base, degli APK dei moduli delle funzionalità e
degli APK di configurazione necessari per eseguire l'app su quel dispositivo. In alternativa, se
il tuo dispositivo connesso esegue Android 4.4 (livello API 20) o versioni precedenti,
bundletool cerca un APK multiplo compatibile da implementare sul tuo dispositivo.
Per eseguire il deployment dell'app da un set di APK, utilizza il comando install-apks e specifica il percorso del set di APK utilizzando il flag --apks=/path/to/apks, come mostrato nel comando seguente. Se hai più dispositivi connessi,
specifica un dispositivo di destinazione aggiungendo il
flag --device-id=serial-id.
bundletool install-apks --apks=/MyApp/my_app.apks
Generare un insieme di APK specifici per il dispositivo
Se non vuoi creare un insieme di APK per tutte le configurazioni dei dispositivi supportate dalla tua app, puoi creare APK destinati solo alla configurazione di un dispositivo connesso utilizzando l'opzione --connected-device, come mostrato nel comando seguente.
Se hai più dispositivi connessi, specifica un dispositivo di destinazione includendo il flag
--device-id=serial-id.
bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Generare e utilizzare i file JSON delle specifiche del dispositivo
bundletool può generare un set di APK che ha come target una configurazione del dispositivo specificata da un file JSON. Per prima cosa, genera un file JSON per un dispositivo connesso eseguendo questo comando:
bundletool get-device-spec --output=/tmp/device-spec.json
bundletool crea un file JSON per il tuo dispositivo nella directory dello strumento. Puoi quindi passare il file a bundletool per generare un insieme di APK che hanno come target solo la configurazione descritta nel file JSON, come segue:
bundletool build-apks --device-spec=/MyApp/pixel2.json --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Crea manualmente un file JSON di specifiche del dispositivo
Se non hai accesso al dispositivo per cui vuoi creare un set di APK mirato, ad esempio se vuoi provare la tua app con un dispositivo che non hai a portata di mano, puoi creare manualmente un file JSON utilizzando il seguente formato:
{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
Puoi quindi passare questo JSON al comando bundle extract-apks, come descritto
nella sezione precedente.
Estrarre APK specifici per i dispositivi da un set di APK esistente
Se hai un set di APK esistente e vuoi estrarne un sottoinsieme di APK
che hanno come target una configurazione specifica del dispositivo, puoi utilizzare il comando extract-apks
e specificare un file JSON di specifiche del dispositivo, come segue:
bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json
Misurare le dimensioni di download stimate degli APK in un set di APK
Per misurare le dimensioni di download stimate degli APK in un set di APK così come
verrebbero pubblicati compressi via cavo, utilizza il comando get-size total:
bundletool get-size total --apks=/MyApp/my_app.apks
Puoi modificare il comportamento del comando get-size total utilizzando i seguenti flag:
Tabella 2. Opzioni per il comando
get-size total
| Segnala | Descrizione |
|---|---|
--apks=path |
(Obbligatorio) Specifica il percorso del file APK set esistente di cui vengono misurate le dimensioni del download. |
--device-spec=path |
Specifica il percorso del file delle specifiche del dispositivo (da
get-device-spec o creato manualmente) da utilizzare per la corrispondenza.
Puoi specificare un percorso parziale per valutare un insieme di configurazioni.
|
--dimensions=dimensions
| Specifica le dimensioni utilizzate per il calcolo delle stime delle dimensioni. Accetta
un elenco separato da virgole di: SDK, ABI,
SCREEN_DENSITY e LANGUAGE. Per misurare in tutte le dimensioni, specifica ALL.
|
--instant |
Misura le dimensioni di download degli APK abilitati per le app istantanee anziché
degli APK installabili. Per impostazione predefinita, bundletool misura le
dimensioni di download degli APK installabili.
|
--modules=modules |
Specifica un elenco separato da virgole di moduli nel set di APK da considerare
nella misurazione. Il comando bundletool include automaticamente
tutti i moduli dipendenti per il set specificato. Per impostazione predefinita, il comando misura le dimensioni di download di tutti i moduli installati durante il primo download.
|
Risorse aggiuntive
Per scoprire di più sull'utilizzo di bundletool, guarda
App bundle: testare i bundle con bundletool e Play Console.