strumento strumenti

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:

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:bundletool include solo i moduli delle funzionalità che specificano <dist:fusing dist:include="true"/> nel file manifest di un APK universale. Per saperne di più, leggi l'articolo sul manifest del modulo di funzionalità.

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 --local-testing, consulta Testare localmente le installazioni dei moduli.

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.