Che il codice sorgente sia scritto in Java, Kotlin o entrambi, è necessario scegliere un linguaggio JDK o Java, per la tua build.
Glossario
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
contiene:
- Strumenti come compilatore, profiler e creatore dell'archivio. che vengono usati dietro le quinte durante la creazione per creare la tua applicazione.
- Librerie contenenti API che puoi chiamare dal tuo Codice sorgente Kotlin o Java. Tieni presente che non tutte le funzioni vengono disponibile su Android.
- La Java Virtual Machine (JVM), un interprete che esegue applicazioni Java. Utilizza la JVM per eseguire l'IDE di Android Studio e lo strumento di creazione Gradle. JVM non utilizzata su Android dispositivi o emulatori.
- Runtime JetBrains (JBR)
- Il runtime di JetBrains (JBR) è una versione avanzata di JDK, distribuita con Android Studio. Include diverse ottimizzazioni per l'utilizzo in Studio e in JetBrains correlati. prodotti, ma può essere utilizzato anche per eseguire altre applicazioni Java.
Come faccio a scegliere un JDK per eseguire Android Studio?
Ti consigliamo di utilizzare JBR per eseguire Android Studio. Viene eseguito il deployment
con e usato per testare Android Studio e include miglioramenti per
Utilizzo di Android Studio. Per farlo, non impostare STUDIO_JDK
variabile di ambiente.
Gli script di avvio per Android Studio cercano una JVM nel seguente ordine:
STUDIO_JDK
variabile di ambiente- Directory
studio.jdk
(nella distribuzione di Android Studio) - Directory
jbr
(JetBrains Runtime), in Android Studio distribuzione dei contenuti. Consigliata. JDK_HOME
variabile di ambienteJAVA_HOME
variabile di ambiente- Eseguibile
java
nella variabile di ambientePATH
Come faccio a scegliere quale JDK esegue le mie build Gradle?
Se esegui Gradle utilizzando i pulsanti in Android Studio, il valore JDK impostato nel
Le impostazioni di Android Studio vengono utilizzate per eseguire Gradle. Se esegui Gradle in un terminale,
all'interno o all'esterno di Android Studio, la variabile di ambiente JAVA_HOME
(se impostato) determina quale JDK esegue gli script Gradle. Se JAVA_HOME
non è impostato, utilizza il comando java
nell'ambiente PATH
.
Per ottenere risultati più coerenti, assicurati di impostare JAVA_HOME
variabile di ambiente
Configurazione JDK di Gradle in Android Studio alla stessa
JDK.
Quando esegui la tua build, Gradle crea un processo chiamato daemon per per eseguire la build effettiva. Questo processo può essere riutilizzato, purché le build utilizzino la stessa versione JDK e Gradle. Riutilizzo un daemon riduce il tempo necessario per avviare una nuova JVM e inizializzare il sistema di compilazione.
Se avvii build con versioni JDK o Gradle diverse, e i daemon, che consumano più CPU e memoria.
Configurazione JDK di Gradle in Android Studio
Per modificare la configurazione JDK Gradle del progetto esistente, apri Gradle impostazioni da File (o Android Studio su macOS) > Impostazioni > Creazione, esecuzione, deployment > Strumenti di creazione > Gradle. Il Gradle JDK contiene le seguenti opzioni tra cui scegliere:
- Macro come
JAVA_HOME
eGRADLE_LOCAL_JAVA_HOME
- Voci della tabella JDK in formato
vendor-version
comejbr-17
che vengono archiviate nei file di configurazione Android - Download di un file JDK
- Aggiunta di un JDK specifico
- JDK rilevati localmente dall'installazione JDK predefinita del sistema operativo directory
L'opzione selezionata è archiviata nell'opzione gradleJvm
nella sezione
.idea/gradle.xml
del progetto e la risoluzione del percorso JDK viene utilizzata per eseguire
Gradle quando viene avviato tramite Android Studio.
Le macro abilitano la selezione dinamica del percorso JDK del progetto:
JAVA_HOME
: utilizza la variabile di ambiente con lo stesso nomeGRADLE_LOCAL_JAVA_HOME
: utilizza la proprietàjava.home
in il file.gradle/config.properties
, che per impostazione predefinita è il runtime JetBrains.
Il JDK selezionato viene utilizzato per eseguire la build Gradle e risolvere l'API JDK
durante la modifica degli script di build e del codice sorgente. Tieni presente che
il valore compileSdk
specificato limiterà ulteriormente i simboli Java che verranno
disponibili durante la modifica e
la creazione del codice sorgente.
Assicurati di scegliere una versione JDK superiore o uguale a JDK utilizzate dai plug-in utilizzati nella build Gradle. Per determinare versione JDK minima richiesta per il plug-in Android Gradle (AGP), consulta tabella di compatibilità nelle note di rilascio.
Ad esempio, il plug-in Android Gradle versione 8.x richiede JDK 17. Se provi a eseguire una build Gradle che la utilizza con una versione precedente di JDK, segnala un messaggio simile al seguente:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
Your current JDK is located in /usr/local/buildtools/java/jdk11
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.
Quali API Java posso utilizzare nel mio codice sorgente Java o Kotlin?
Un'applicazione Android può utilizzare alcune delle API definite in un JDK, ma non tutte
alcune. L'SDK Android definisce le implementazioni di molte funzioni della libreria Java
come parte delle sue API disponibili. La proprietà compileSdk
specifica
Versione dell'SDK Android da utilizzare durante la compilazione del codice sorgente Kotlin o Java.
Kotlin
android {
...
compileSdk = 33
}
Alla moda
android {
...
compileSdk 33
}
Ogni versione di Android supporta una specifica versione del JDK e un sottoinsieme di
dalle API Java disponibili. Se utilizzi un'API Java disponibile in
a compileSdk
che non è disponibile nel
minSdk
, potresti essere in grado di usare l'API
nella versione precedente di Android tramite un processo noto come
desugaring.
Consulta le API Java 11 e versioni successive disponibili tramite desugaring per le versioni supportate
su quelle di livello inferiore.
Utilizza questa tabella per determinare quale versione di Java è supportata ogni API Android e dove trovare i dettagli sulle API Java disponibili.
Android | Java | Funzionalità di API e lingua supportate |
---|---|---|
14 (API 34) | 17 | Librerie di base |
13 (API 33) | 11 | Librerie di base |
12 (API 32) | 11 | API Java |
11 e inferiori | Versioni di Android |
Quale JDK compila il mio codice sorgente Java?
Il JDK Java toolchain contiene il compilatore Java utilizzato per compilare qualsiasi codice sorgente. Questo JDK esegue anche javadoc e test delle unità durante la build.
Per impostazione predefinita, la toolchain è il JDK utilizzato per eseguire Gradle. Se utilizzi l'impostazione predefinita ed eseguire una build su macchine diverse (ad esempio, la tua macchina locale su un server di integrazione continua separato), i risultati della build e può differire se vengono utilizzate versioni di JDK diverse.
Per creare una build più coerente, puoi specificare in modo esplicito un Versione Toolchain Java. Specifica questo:
- Individua un JDK compatibile nel sistema che esegue la build.
- Se non esiste un JDK compatibile (ed è definito un resolver Toolchain), ne scarica uno.
- Espone le API Java della toolchain per le chiamate dal codice sorgente.
- Compila il codice sorgente Java utilizzando la versione del linguaggio Java.
- Valori predefiniti degli forniture per
sourceCompatibility
etargetCompatibility
.
Ti consigliamo di specificare sempre la toolchain Java e di assicurarti che sia installato il JDK specificato oppure resolver toolchain alla tua build.
Puoi specificare la toolchain se il codice sorgente è scritto in Java,
Kotlin o entrambe le cose. Specifica la toolchain al livello superiore del modulo
build.gradle(.kts)
.
Specifica la versione della toolchain Java nel seguente modo:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Alla moda
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Questa opzione funziona se il tuo codice sorgente è Kotlin, Java o una combinazione di entrambi.
La versione JDK della toolchain può essere uguale a quella JDK usata per eseguire Gradle, ma tieni presente che hanno scopi diversi.
Quali funzionalità sorgente del linguaggio Java posso utilizzare nel mio codice sorgente Java?
La proprietà sourceCompatibility
determina le funzionalità del linguaggio Java
sono disponibili durante la compilazione
del codice sorgente Java.
Questa operazione non influisce sull'origine di Kotlin.
Se non specificato, il valore predefinito sarà Java toolchain o
JDK utilizzato per eseguire Gradle. Ti consigliamo di specificare sempre in modo esplicito
una toolchain (opzione preferita) o sourceCompatibility
.
Specifica sourceCompatibility
nel file build.gradle(.kts)
del modulo.
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Alla moda
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Quali caratteristiche binarie Java possono essere utilizzate durante la compilazione del mio codice sorgente Kotlin o Java?
Se vengono specificati targetCompatibility
e jvmTarget
, viene
versione class-format utilizzata durante la generazione del bytecode per Java e Kotlin compilati
origine dati.
Alcune caratteristiche Kotlin esistevano prima dell'aggiunta di caratteristiche Java equivalenti.
I primi compilatori di Kotlin dovevano creare il proprio modo per rappresentare i modelli
le funzionalità di machine learning. Alcune di queste funzionalità sono state aggiunte in seguito a Java.
Con i livelli jvmTarget
successivi, il compilatore Kotlin potrebbe utilizzare direttamente
la funzionalità Java, che potrebbe portare a prestazioni migliori.
Il valore predefinito di targetCompatibility
è lo stesso del
sourceCompatibility
,
ma, se specificato, deve essere maggiore o uguale a sourceCompatibility
.
Per impostazione predefinita, jvmTarget
utilizza la versione toolchain.
Versioni diverse di Android supportano versioni diverse di Java. Puoi
sfruttare le funzionalità Java aggiuntive aumentando
targetCompatibility
e jvmTarget
, ma questo potrebbe obbligarti a
aumenta
versione minima dell'SDK Android per garantire
la funzionalità sia disponibile.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Alla moda
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}