Puoi eseguire tutte le attività di build disponibili per il tuo progetto Android utilizzando lo strumento a riga di comando Gradle Wrapper. È disponibile come file batch per Windows (gradlew.bat) e come script shell per Linux e Mac (gradlew.sh) ed è accessibile dalla directory principale di ogni progetto creato con Android Studio.
Per eseguire un'attività con il wrapper, utilizza uno dei seguenti comandi da una finestra del terminale (da Android Studio, seleziona Visualizza > Finestre degli strumenti > Terminale):
Nella shell dei comandi Windows:
gradlew task-nameSu Mac, Linux o Windows PowerShell:
./gradlew task-name
Per visualizzare un elenco di tutte le attività di build disponibili per il tuo progetto, esegui tasks:
gradlew tasks
Il resto di questa pagina descrive le nozioni di base per creare ed eseguire l'app con il wrapper Gradle. Per saperne di più su come configurare la build Android, consulta Configura la build.
Se preferisci utilizzare gli strumenti di Android Studio anziché quelli da riga di comando, consulta Crea ed esegui l'app.
Informazioni sui tipi di build
Per impostazione predefinita, sono disponibili due tipi di build per ogni app per Android: una per il debug dell'app, la build di debug, e una per il rilascio dell'app agli utenti, la build di release. L'output risultante da ogni build deve essere firmato con un certificato prima di poter eseguire il deployment dell'app su un dispositivo. La build di debug viene firmata automaticamente con una chiave di debug fornita dagli Strumenti SDK (non è sicura e non puoi utilizzarla per la pubblicazione sul Google Play Store), mentre la build di release deve essere firmata con la tua chiave privata.
Se vuoi creare la tua app per il rilascio, è importante anche firmarla con la chiave di firma appropriata. Tuttavia, se hai appena iniziato, puoi eseguire rapidamente le tue app su un emulatore o un dispositivo connesso creando un APK di debug.
Puoi anche definire un tipo di build personalizzato nel file build.gradle.kts e configurarlo in modo che venga firmato come build di debug includendo debuggable true. Per saperne di più, consulta Configura le varianti di compilazione.
Crea ed esegui il deployment di un APK
Sebbene la creazione di un app bundle sia il modo migliore per pacchettizzare l'app e caricarla su Play Console, la creazione di un APK è più adatta se vuoi testare rapidamente una build di debug o condividere l'app con altri utenti come artefatto di cui è possibile eseguire il deployment.
Crea un APK di debug
Per testare ed eseguire il debug dell'app immediatamente, puoi creare un APK di debug.
L'APK di debug è firmato con una chiave di debug fornita dagli Strumenti SDK e consente il debug tramite adb.
Per creare un APK di debug, apri una riga di comando e vai alla directory principale del progetto. Per avviare una build di debug, richiama l'attività assembleDebug:
gradlew assembleDebug
Viene creato un APK denominato module_name-debug.apk in
project_name/module_name/build/outputs/apk/.
Il file è già firmato con la chiave di debug e allineato con
zipalign, quindi puoi
installarlo immediatamente su un dispositivo.
In alternativa, per creare l'APK e installarlo immediatamente su un emulatore in esecuzione o su un dispositivo connesso, richiama installDebug:
gradlew installDebug
La parte "Debug" nei nomi delle attività è solo una versione in notazione a cammello del nome della variante di compilazione, quindi può essere sostituita con qualsiasi tipo o variante di compilazione che vuoi assemblare o installare. Ad esempio, se hai una versione prodotto "demo", puoi creare la versione di debug con l'attività assembleDemoDebug.
Per visualizzare tutte le attività di build e installazione disponibili per ogni variante (incluse le attività di disinstallazione), esegui l'attività tasks.
Consulta anche la sezione su come eseguire l'app sull'emulatore ed eseguire l'app su un dispositivo.
Crea un bundle o un APK di release
Quando è tutto pronto per rilasciare e distribuire l'app, devi creare un bundle o un APK di release firmato con la tua chiave privata. Per maggiori informazioni, consulta la sezione su come firmare l'app dalla riga di comando.
Esegui il deployment dell'app nell'emulatore
Per utilizzare l'emulatore Android, devi creare un Android Virtual Device (AVD) utilizzando Android Studio.
Una volta ottenuto un AVD, avvia l'emulatore Android e installa la tua app nel seguente modo:
In una riga di comando, vai a
android_sdk/tools/e avvia l'emulatore specificando il tuo AVD:emulator -avd <var>avd_name</var>Se non conosci il nome dell'AVD, esegui
emulator -list-avds.Ora puoi installare l'app utilizzando una delle attività di installazione di Gradle menzionate nella sezione su come creare un APK di debug o lo strumento
adb.Se l'APK è stato creato utilizzando un SDK Anteprima per gli sviluppatori (se
targetSdkVersionè una lettera anziché un numero), devi includere l'opzione-tcon il comandoinstallper installare un APK di test.adb install <var>path/to/your_app</var>.apkTutti gli APK che crei vengono salvati in
project_name/module_name/build/outputs/apk/.
Per saperne di più, consulta Esegui app sull'emulatore Android.
Esegui il deployment dell'app su un dispositivo fisico
Prima di poter eseguire l'app su un dispositivo, devi attivare il debug USB sul dispositivo. Puoi trovare l'opzione in Impostazioni > Opzioni sviluppatore.
Una volta configurato e connesso il dispositivo tramite USB, puoi installare l'app utilizzando le attività di installazione di Gradle menzionate nella sezione su come creare un APK di debug o lo strumento adb:
adb -d install path/to/your_app.apk
Tutti gli APK che crei vengono salvati in
project_name/module_name/build/outputs/apk/.
Per saperne di più, consulta Esegui app su un dispositivo hardware.
Crea un app bundle
Gli Android App Bundle includono tutto il codice e le risorse compilati della tua app, ma rimandano la generazione e la firma dell'APK a Google Play. A differenza di un APK, non puoi eseguire il deployment di un app bundle direttamente su un dispositivo. Pertanto, se vuoi testare o condividere rapidamente un APK con un'altra persona, devi creare un APK.
Il modo più semplice per creare un app bundle è
utilizzare Android Studio. Tuttavia, se devi creare un
app bundle dalla riga di comando, puoi farlo utilizzando Gradle o
bundletool, come descritto nelle sezioni seguenti.
Crea un app bundle con Gradle
Se preferisci generare un app bundle dalla riga di comando, esegui l'attività Gradle bundleVariant sul modulo di base della tua app.
Ad esempio, il comando seguente crea un app bundle per la versione di debug del modulo di base:
./gradlew :base:bundleDebug
Se vuoi creare un bundle firmato da caricare su Play Console, devi prima configurare il file build.gradle.kts del modulo di base con le informazioni di firma dell'app. Per scoprire di più, vai alla sezione su come
configurare Gradle per firmare l'app.
In seguito, puoi ad esempio creare la versione di release dell'app e Gradle
genera automaticamente un app bundle e lo firma con le informazioni di firma
fornite nel file build.gradle.kts.
Se invece vuoi firmare un app bundle come passaggio separato, puoi utilizzare
jarsigner
per firmare l'app bundle dalla riga di comando. Il comando per creare un app bundle è:
jarsigner -keystore pathToKeystore app-release.aab keyAliasCrea un app bundle utilizzando bundletool
bundletool è uno strumento a riga di comando utilizzato da Android Studio, dal plug-in Android Gradle e da Google Play per convertire il codice compilato e le risorse della tua app in app bundle e generare APK di cui è possibile eseguire il deployment da questi bundle.
Pertanto, sebbene sia utile testare gli app bundle con bundletool e ricreare localmente il modo in cui Google Play genera gli APK, in genere non è necessario richiamare bundletool per creare l'app bundle stesso. Dovresti invece utilizzare le attività di Android Studio o Gradle, come descritto nelle sezioni precedenti.
Tuttavia, se non vuoi utilizzare Android Studio o le attività Gradle per creare bundle, ad esempio se utilizzi una toolchain di build personalizzata, puoi utilizzare bundletool dalla riga di comando per creare un app bundle da codice e risorse precompilati. Se non l'hai ancora fatto, scarica bundletool dal repository GitHub.
Questa sezione descrive come pacchettizzare il codice e le risorse compilati della tua app e come utilizzare bundletool dalla riga di comando per convertirli in un Android App Bundle.
Genera il manifest e le risorse in formato proto
bundletool richiede che alcune informazioni sul progetto dell'app, ad esempio il manifest e le risorse dell'app, siano nel formato buffer di protocollo di Google, noto anche come "protobuf", che utilizza l'estensione del file *.pb. I protobuf forniscono un meccanismo indipendente dal linguaggio, indipendente dalla piattaforma ed estensibile per la serializzazione dei dati strutturati, simile a XML, ma più piccolo, più veloce e più semplice.
Scarica AAPT2
Puoi generare il file manifest e la tabella delle risorse della tua app in formato protobuf utilizzando l'ultima versione di AAPT2 dal repository Maven di Google.
Per scaricare AAPT2 dal repository Maven di Google, procedi nel seguente modo:
- Vai a com.android.tools.build > aapt2 nell'indice del repository.
- Copia il nome dell'ultima versione di AAPT2.
Inserisci il nome della versione che hai copiato nel seguente URL e specifica il sistema operativo di destinazione: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar
Ad esempio, per scaricare la versione 3.2.0-alpha18-4804415 per Windows, devi utilizzare: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar
Vai all'URL in un browser. Il download di AAPT2 dovrebbe iniziare a breve.
Decomprimi il file JAR appena scaricato.
Compila e collega le risorse della tua app
Utilizza AAPT2 per compilare le risorse della tua app con il seguente comando:
aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/
Durante la fase di collegamento, in cui AAPT2 collega le varie risorse compilate in un
singolo APK, indica ad AAPT2 di convertire il manifest e le risorse compilate dell'app
nel formato protobuf includendo il flag --proto-format, come mostrato
nell'esempio seguente:
aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay
Puoi quindi estrarre i contenuti dall'APK di output, ad esempio i file AndroidManifest.xml, resources.pb e altri file di risorse della tua app, ora nel formato protobuf. Questi file sono necessari per preparare l'input richiesto da bundletool per creare l'app bundle, come descritto nella sezione seguente.
Pacchetto di codice e risorse precompilati
Prima di utilizzare bundletool per generare un app bundle per la tua app, devi
fornire i file ZIP che contengono il codice e le risorse compilati per un
determinato modulo dell'app. I contenuti e l'organizzazione del file ZIP di ogni modulo sono molto simili a quelli del formato Android App Bundle.
Ad esempio, devi creare un file base.zip per il modulo di base della tua app e organizzarne i contenuti come segue:
| File o directory | Descrizione |
|---|---|
manifest/AndroidManifest.xml
|
Il manifest del modulo in formato protobuf. |
dex/...
|
Una directory con uno o più file DEX compilati della tua app. Questi file devono essere denominati come segue: classes.dex, classes2.dex, classes3.dex e così via.
|
res/...
|
Contiene le risorse del modulo in formato protobuf per tutte le configurazioni del dispositivo. Le sottodirectory e i file devono essere organizzati in modo simile a un APK tipico. |
root/..., assets/... e lib/...
|
Queste directory sono identiche a quelle descritte nella sezione relativa al formato Android App Bundle. |
resources.pb
|
La tabella delle risorse della tua app in formato protobuf. |
Dopo aver preparato il file ZIP per ogni modulo della tua app, puoi passarlo a bundletool per creare l'app bundle, come descritto nella sezione seguente.
Crea l'app bundle utilizzando bundletool
Per creare l'app bundle, utilizza il comando bundletool build-bundle, come mostrato nell'esempio seguente:
bundletool build-bundle --modules=base.zip --output=mybundle.aab
La tabella seguente descrive in modo più dettagliato i flag per il comando build-bundle:
| Flag | Descrizione |
|---|---|
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip
|
Specifica l'elenco di file ZIP dei moduli che bundletool deve utilizzare per creare l'app bundle.
|
--output=path-to-output.aab
|
Specifica il percorso e il nome file del file *.aab di output.
|
--config=path-to-BundleConfig.json
|
Specifica il percorso di un file di configurazione facoltativo che puoi utilizzare per personalizzare il processo di build. Per scoprire di più, consulta la sezione relativa alla personalizzazione della generazione di APK downstream. |
--metadata-file=target-bundle-path:local-file-path
|
Indica a bundletool di pacchettizzare un file di metadati facoltativo all'interno dell'app bundle. Puoi utilizzare questo file per includere dati, ad esempio
le mappature ProGuard o l'elenco completo dei file DEX della tua app, che potrebbero
essere utili per altri passaggi della tua toolchain o di uno store.
target-bundle-path specifica un percorso relativo alla radice dell'app bundle in cui vuoi pacchettizzare il file di metadati e local-file-path specifica il percorso del file di metadati locale stesso. |
Personalizza la generazione di APK downstream
Gli app bundle includono un file BundleConfig.pb che fornisce i metadati richiesti dagli store, come Google Play, durante la generazione degli APK dal bundle.
Sebbene bundletool crei questo file per te, puoi configurare alcuni aspetti dei metadati in un file BundleConfig.json e passarlo al comando bundletool build-bundle. bundletool converte e unisce questo file con la versione protobuf inclusa in ogni app bundle.
Ad esempio, puoi controllare quali categorie di APK di configurazione attivare o disattivare. L'esempio seguente di un file BundleConfig.json disattiva gli APK di configurazione, ciascuno dei quali ha come target una lingua diversa (ovvero le risorse per tutte le lingue sono incluse nei rispettivi APK di base o delle funzionalità):
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
Nel file BundleConfig.json, puoi anche specificare quali tipi di file lasciare non compressi durante la pacchettizzazione degli APK utilizzando i pattern glob, come segue:
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
Tieni presente che, per impostazione predefinita, bundletool non comprime le librerie native dell'app (su Android 6.0 o versioni successive) e la tabella delle risorse (resources.arsc). Per una descrizione completa di ciò che puoi configurare nel tuo BundleConfig.json, controlla il file bundletool config.proto, scritto utilizzando la sintassi Proto3.
Esegui il deployment dell'app da un app bundle
Se hai creato e firmato un app bundle, utilizza bundletool per generare gli APK ed eseguirne il deployment su un dispositivo.
Firma l'app dalla riga di comando
Non è necessario Android Studio per firmare l'app. Puoi firmarla dalla riga di comando utilizzando apksigner per gli APK o jarsigner per gli app bundle oppure configurare Gradle in modo che la firmi durante la build. In entrambi i casi, devi prima generare una chiave privata utilizzando keytool, come mostrato nell'esempio seguente:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
Questo esempio ti chiede le password per l'archivio chiavi e la chiave, nonché i campi "Nome distinto" per la chiave. Quindi genera il keystore come file denominato my-release-key.jks, salvandolo nella directory corrente (puoi spostarlo dove preferisci). Il keystore contiene una singola chiave valida per 10.000 giorni.
Ora puoi firmare manualmente l'APK o l'app bundle oppure configurare Gradle per firmare l'app durante il processo di build, come descritto nelle sezioni seguenti.
Firma l'app manualmente dalla riga di comando
Se vuoi firmare un app bundle dalla riga di comando, puoi utilizzare
jarsigner.
Se invece vuoi firmare un APK, devi utilizzare zipalign e apksigner:
Apri una riga di comando: da Android Studio, seleziona Visualizza > Finestre degli strumenti > Terminale e vai alla directory in cui si trova l'APK non firmato.
Allinea l'APK non firmato utilizzando
zipalign:zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
zipaligngarantisce che tutti i dati non compressi inizino con un particolare allineamento dei byte rispetto all'inizio del file, il che potrebbe ridurre la quantità di RAM utilizzata da un'app.Firma l'APK con la tua chiave privata utilizzando
apksigner:apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
Questo esempio genera l'APK firmato in
my-app-release.apkdopo averlo firmato con una chiave privata e un certificato archiviati in un singolo file KeyStore:my-release-key.jks.Lo strumento
apksignersupporta altre opzioni di firma, tra cui la firma di un file APK utilizzando file di chiave privata e certificato separati e la firma di un APK utilizzando più firmatari. Per maggiori dettagli, consulta il riferimentoapksigner.Verifica che l'APK sia firmato:
apksigner verify my-app-release.apk
Configura Gradle per firmare l'app
Apri il file build.gradle.kts a livello di modulo e aggiungi il blocco signingConfigs {} con le voci per storeFile, storePassword, keyAlias e keyPassword, quindi passa l'oggetto alla proprietà signingConfig nel tipo di build. Ad esempio:
Kotlin
android { ... defaultConfig { ... } signingConfigs { create("release") { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile = file("my-release-key.jks") storePassword = "password" keyAlias = "my-alias" keyPassword = "password" } } buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
Alla moda
android { ... defaultConfig { ... } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("my-release-key.jks") storePassword "password" keyAlias "my-alias" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release ... } } }
Ora, quando crei la tua app richiamando un'attività Gradle, Gradle firma l'app (ed esegue zipalign) per te.
Inoltre, poiché hai configurato la build di release con la tua chiave di firma, l'attività "install" è disponibile per quel tipo di build. In questo modo, puoi creare, allineare, firmare e installare l'APK di release su un emulatore o un dispositivo, il tutto con l'attività installRelease.
Un'app firmata con la tua chiave privata è pronta per la distribuzione, ma prima dovresti leggere ulteriori informazioni su come pubblicare la tua app ed esaminare l'elenco di controllo per il lancio su Google Play.