Puoi eseguire tutte le attività di compilazione 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 (in Android Studio, seleziona Visualizza > Finestre degli strumenti > Terminale):
- Nella shell di comando di Windows:
gradlew task-name
- Su Mac, Linux o Windows PowerShell:
./gradlew task-name
Per visualizzare un elenco di tutte le attività di compilazione disponibili per il tuo progetto, esegui tasks
:
gradlew tasks
Il resto di questa pagina descrive le nozioni di base per compilare ed eseguire l'app con il wrapper Gradle. Per ulteriori informazioni su come configurare la build Android, consulta Configurare la build.
Se preferisci utilizzare gli strumenti di Android Studio anziché gli strumenti a riga di comando, consulta Compilare ed eseguire 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 la release dell'app agli utenti (la build di release). L'output risultante di ogni compilazione 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 pubblicare sul Google Play Store) e la build di release deve essere firmata con la tua chiave privata.
Se vuoi compilare l'app per la release, è importante anche firmarla con la chiave di firma appropriata. Tuttavia, se sei agli inizi, puoi eseguire rapidamente le tue app su un emulatore o un dispositivo connesso creando un APK di debug.
Puoi anche definire un tipo di compilazione personalizzato nel file build.gradle.kts
e configurarlo in modo che venga firmato come compilazione di debug includendo
debuggable true
. Per ulteriori informazioni, consulta Configurare le varianti di build.
Creare e implementare un APK
Sebbene la creazione di un app bundle sia il modo migliore per impacchettare l'app e caricarla su Play Console, la creazione di un APK è più adatta quando vuoi testare rapidamente una build di debug o condividere la tua app come elemento di deployment con altri.
Creare un APK di debug
Per testare e eseguire il debug immediato dell'app, 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 compilare un APK di debug, apri una riga di comando e vai alla directory principale del progetto. Per avviare una compilazione di debug, invoca 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 compilare l'APK e installarlo immediatamente su un emulatore o un dispositivo connesso in esecuzione, invoca installDebug
:
gradlew installDebug
La parte "Debug" nei nomi delle attività precedenti è solo una versione in lettere maiuscole e minuscole del nome della variante di build, pertanto può essere sostituita con il tipo o la variante di build che vuoi assemblare o installare. Ad esempio, se hai un "demo"
impostazione del prodotto, puoi creare la versione di debug con l'attività
assembleDemoDebug
.
Per visualizzare tutte le attività di compilazione 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 e eseguire l'app su un dispositivo.
Crea un app bundle o un APK di release
Quando è tutto pronto per rilasciare e distribuire l'app, devi creare un app bundle o un APK firmato con la tua chiave privata. Per ulteriori 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 dispositivo virtuale Android (AVD) utilizzando Android Studio.
Dopo aver creato un AVD, avvia l'emulatore Android e installa la tua app come segue:
In una riga di comando, vai a
android_sdk/tools/
e avvia l'emulatore specificando il tuo AVD:emulator -avd avd_name
Se hai dubbi sul nome dell'AVD, esegui
emulator -list-avds
.- Ora puoi installare l'app utilizzando una delle attività di installazione di Gradle
riportate nella sezione su come creare un APK di debug
o lo strumento
adb
.Se l'APK viene creato utilizzando un SDK di anteprima per sviluppatori (se
targetSdkVersion
è una lettera anziché un numero), devi includere l'opzione-t
con il comandoinstall
per installare un APK di test.adb install path/to/your_app.apk
Tutti gli APK che crei vengono salvati in
project_name/module_name/build/outputs/apk/
.
Per ulteriori informazioni, vedi Eseguire app nell'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.
Nota:su Android 4.2 e versioni successive, Opzioni sviluppatore è nascosta per impostazione predefinita. Per renderlo disponibile, vai a Impostazioni > Informazioni sullo smartphone e tocca Numero build sette volte. Torna alla schermata precedente per trovare Opzioni sviluppatore.
Una volta configurato e collegato 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 ulteriori informazioni, consulta Eseguire app su un dispositivo hardware.
Creare un app bundle
Gli Android App Bundle includono tutto il codice e le risorse compilati della tua app, ma richiedono la generazione e la firma dell'APK a Google Play. A differenza di un APK, non puoi implementare un app bundle direttamente su un dispositivo. Pertanto, se vuoi testare o condividere rapidamente un APK con qualcun altro, devi crearlo.
Il modo più semplice per creare un app bundle è utilizzare Android Studio. Tuttavia, se devi compilare un bundle di app dalla riga di comando, puoi utilizzare Gradle o bundletool
, come descritto nelle sezioni seguenti.
Creare un app bundle con Gradle
Se preferisci generare un app bundle dalla riga di comando, esegui l'bundleVariant
attività Gradle sul modulo base della tua app.
Ad esempio, il seguente comando 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. Puoi quindi, ad esempio, compilare la versione release dell'app e Gradle genererà automaticamente un app bundle e lo firmerà 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 bundle di app è:
jarsigner -keystore pathToKeystore app-release.aab keyAlias
Creare un app bundle utilizzando bundletool
bundletool
è uno strumento a riga di comando utilizzato da Android Studio, dal plug-in Gradle per Android e da Google Play per convertire il codice e le risorse compilati dell'app in app bundle e generare APK di cui è possibile eseguire il deployment da questi bundle.
Pertanto, anche se è utile
testare gli app bundle con bundletool
e ricreare localmente
come Google Play genera gli APK, in genere non è necessario invocare bundletool
per compilare l'app bundle stesso. È invece consigliabile
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 i bundle, ad esempio se utilizzi una toolchain di compilazione 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 dell'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 determinate informazioni sul progetto dell'app, ad esempio il manifest e le risorse dell'app, siano nel formato Protocol Buffer di Google, noto anche come "protobuf" e che utilizzi l'estensione file *.pb
. I protobufs
forniscono un meccanismo estensibile, indipendente dal linguaggio e dalla piattaforma per la serializzazione dei dati strutturati. Sono simili a XML, ma più piccoli, più veloci e più semplici.
Scarica AAPT2
Puoi generare il file manifest e la tabella delle risorse della tua app in formato protobuf utilizzando la versione più recente 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 della versione più recente 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.
Estrai il file JAR che hai appena scaricato.
Compila e collega le risorse dell'app
Utilizza AAPT2 per compilare le risorse dell'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, chiedi ad AAPT2 di convertire il file manifest e le risorse compilate dell'app nel formato protobuf includendo il flag --proto-format
, come mostrato di seguito:
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 AndroidManifest.xml
, resources.pb
e altri file di risorse della tua app, ora nel formato protobuf. Questi file sono necessari per preparare gli input richiesti da bundletool
per compilare il tuo app bundle, come descritto nella sezione seguente.
Impacchettare codice e risorse precompilate
Prima di utilizzare bundletool
per generare un app bundle per la tua app, devi fornire innanzitutto file ZIP contenenti ciascuno 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 del bundle di app per Android.
Ad esempio, devi creare un file base.zip
per il modulo di base dell'app e
organizzare i relativi contenuti come segue:
File o directory | Descrizione |
---|---|
manifest/AndroidManifest.xml
|
Il file 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 dell'app in formato protobuf. |
Dopo aver preparato il file ZIP per ogni modulo dell'app, puoi trasmetterli
a bundletool
per creare il tuo app bundle, come descritto nella sezione seguente.
Creare l'app bundle utilizzando bundletool
Per creare il bundle dell'app, utilizza il comando bundletool build-bundle
, come mostrato di seguito:
bundletool build-bundle --modules=base.zip --output=mybundle.aab
La tabella seguente descrive più dettagliatamente i flag per il comando build-bundle
:
Segnala | Descrizione |
---|---|
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip
|
Specifica l'elenco dei file ZIP dei moduli che bundletool deve
utilizzare per compilare il bundle di app.
|
--output=path-to-output.aab
|
Specifica il percorso e il nome 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 compilazione. Per scoprire di più, consulta la sezione sulla personalizzazione della generazione di APK a valle. |
--metadata-file=target-bundle-path:local-file-path
|
Indica a bundletool di pacchettizzare un file facoltativo dei metadati
all'interno del tuo app bundle. Puoi utilizzare questo file per includere dati, ad esempio mappature di ProGuard o l'elenco completo dei file DEX della tua app, che potrebbero essere utili per altri passaggi della tua toolchain o di un app store.
target-bundle-path specifica un percorso relativo alla radice del bundle di app in cui vuoi che venga pacchettizzato il file dei metadati, mentre local-file-path specifica il percorso del file dei metadati locale stesso. |
Personalizzare la generazione di APK a valle
Gli app bundle includono un file BundleConfig.pb
che fornisce i metadati richiesti dagli store, come Google Play, per la generazione di APK dal bundle.
Sebbene bundletool
crei questo file per te, puoi configurare alcuni aspetti
degli metadati in un file BundleConfig.json
e passarlo al
comando bundletool build-bundle
. bundletool
in seguito 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. Il seguente esempio di 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 di funzionalità):
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
Nel file BundleConfig.json
puoi anche specificare i tipi di file da non comprimere durante il packaging degli APK utilizzando i
pattern di glob, come segue:
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
Tieni presente che, per impostazione predefinita, bundletool
non comprime le librerie native (su Android 6.0 o versioni successive) e la tabella delle risorse (resources.arsc
) dell'app. Per una descrizione completa di ciò che puoi configurare in BundleConfig.json
, controlla il file bundletool
config.proto
, scritto utilizzando la sintassi Proto3.
Eseguire il deployment dell'app da un app bundle
Se hai creato e firmato un app bundle,
utilizza bundletool
per generare gli APK e eseguirne il deployment su un dispositivo.
Firmare l'app dalla riga di comando
Non è necessario Android Studio per firmare l'app. Puoi firmare l'app dalla riga di comando utilizzando apksigner
per gli APK o jarsigner
per gli app bundle oppure configurare Gradle in modo che la firmi per te durante la compilazione. In ogni caso, devi prima generare una chiave privata utilizzando keytool
, come mostrato di seguito:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
L'esempio riportato sopra ti chiede le password per il keystore e la chiave, nonché per i campi "Nome distinto" della chiave. Quindi genera il
file del keystore denominato my-release-key.jks
e lo salva 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 la tua app durante il processo di compilazione, come descritto nelle sezioni seguenti.
Firmare manualmente l'app 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
come descritto di seguito.
- Apri una riga di comando: in 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
zipalign
garantisce che tutti i dati non compressi inizino con un particolare allineamento dei byte rispetto all'inizio del file, il che può ridurre la quantità di RAM consumata 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.apk
dopo averlo firmato con una chiave privata e un certificato memorizzati in un singolo file KeyStore:my-release-key.jks
.Lo strumento
apksigner
supporta altre opzioni di firma, tra cui la firma di un file APK utilizzando file di chiavi private e certificati separati e la firma di un APK utilizzando più firmatari. Per ulteriori dettagli, consulta la documentazione di riferimentoapksigner
.Nota: per utilizzare lo strumento
apksigner
, devi avere installato la revisione 24.0.3 o successive di Android SDK Build Tools. Puoi aggiornare questo pacchetto utilizzando SDK Manager. -
Verifica che l'APK sia firmato:
apksigner verify my-app-release.apk
Configurare 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") ... } } }
Groovy
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 l'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 compilare, allineare, firmare e installare l'APK release su un emulatore o un dispositivo con l'attività installRelease
.
Un'app firmata con la tua chiave privata è pronta per la distribuzione, ma devi prima approfondire come pubblicare la tua app e consultare l'elenco di controllo per il lancio su Google Play.