Que votre code source soit écrit en Java, en Kotlin ou les deux, vous devez choisir un langage JDK ou Java à plusieurs endroits pour votre build.
Glossaire
- Java Development Kit (JDK)
-
Le kit de développement Java (JDK)
contient:
<ph type="x-smartling-placeholder">
- </ph>
- Outils, tels qu'un compilateur, un profileur et un créateur d'archives Ils sont utilisés en arrière-plan lors de la compilation pour créer votre application.
- Les bibliothèques contenant des API que vous pouvez appeler Code source Kotlin ou Java. Notez que toutes les fonctions ne sont pas disponible sur Android.
- La machine virtuelle Java (JVM), un interpréteur qui exécute applications Java. Vous utiliserez la JVM pour exécuter l'IDE Android Studio et l'outil de compilation Gradle. La JVM n'est pas utilisée sur Android d'appareils ou d'émulateurs.
- Environnement d'exécution JetBrains (JBR)
- L'environnement d'exécution JetBrains Runtime (JBR) est un JDK amélioré, distribué avec Android Studio. Il inclut plusieurs optimisations à utiliser dans Studio et les JetBrains associés. mais il peut aussi être utilisé pour exécuter d'autres applications Java.
Comment choisir un JDK pour exécuter Android Studio ?
Nous vous recommandons d'utiliser le JBR pour exécuter Android Studio. Il est déployé
avec et utilisé pour tester Android Studio, et inclut des améliorations pour optimiser
Utilisation d'Android Studio. Pour ce faire, ne définissez pas STUDIO_JDK
variable d'environnement.
Les scripts de démarrage pour Android Studio recherchent une JVM dans les commande:
- Variable d'environnement
STUDIO_JDK
- Répertoire
studio.jdk
(dans la distribution Android Studio) - Répertoire
jbr
(environnement d'exécution JetBrains), dans Android Studio distribution. Recommandé. - Variable d'environnement
JDK_HOME
- Variable d'environnement
JAVA_HOME
- Exécutable
java
dans la variable d'environnementPATH
Comment choisir le JDK qui exécute mes compilations Gradle ?
Si vous exécutez Gradle à l'aide des boutons d'Android Studio, le JDK défini dans le
Les paramètres Android Studio permettent d'exécuter Gradle. Si vous exécutez Gradle dans un terminal,
à l'intérieur ou à l'extérieur d'Android Studio, la variable d'environnement JAVA_HOME
(si défini) détermine quel JDK exécute les scripts Gradle. Si JAVA_HOME
n'est pas défini, il utilise la commande java
dans votre environnement PATH
.
Pour des résultats plus cohérents, veillez à définir votre JAVA_HOME
variable d'environnement et
Configuration du JDK Gradle dans Android Studio sur cette même
JDK.
Lors de l'exécution de votre build, Gradle crée un processus appelé daemon pour la compilation proprement dite. Ce processus peut être réutilisé, tant que les builds utilisent la même version du JDK et de Gradle. Réutilisation un daemon réduit le temps de démarrage d'une nouvelle JVM et d'initialisation du système de compilation.
Si vous démarrez des compilations avec d'autres JDK ou versions de Gradle, les daemons sont créés, ce qui consomme plus de CPU et de mémoire.
Configuration du JDK Gradle dans Android Studio
Pour modifier la configuration du JDK Gradle du projet existant, ouvrez le fichier Gradle dans Fichier (ou Android Studio sous macOS) > Paramètres > Création, exécution, déploiement > Outils de compilation > Gradle. Le JDK Gradle contient les options suivantes que vous pouvez sélectionner:
- Macros telles que
JAVA_HOME
etGRADLE_LOCAL_JAVA_HOME
- Entrées de la table JDK au format
vendor-version
, telles quejbr-17
, qui sont stockées dans les fichiers de configuration Android - Télécharger un JDK
- Ajouter un JDK spécifique
- JDK détectés localement à partir de l'installation JDK par défaut du système d'exploitation annuaire
L'option sélectionnée est stockée dans l'option gradleJvm
du sous-dossier
le fichier .idea/gradle.xml
du projet et la résolution de son chemin d'accès au JDK, sont utilisés pour exécuter
Gradle au démarrage via Android Studio.
Les macros permettent la sélection dynamique du chemin d'accès au JDK du projet:
JAVA_HOME
: utilise la variable d'environnement portant le même nom.GRADLE_LOCAL_JAVA_HOME
: utilise la propriétéjava.home
dans le fichier.gradle/config.properties
, qui utilise par défaut l'environnement d'exécution JetBrains.
Le JDK sélectionné est utilisé pour exécuter votre build Gradle et résoudre l'API JDK
lors de la modification de vos scripts de compilation et de votre code source. Notez que
compileSdk
spécifié limite davantage les symboles Java qui seront
disponibles lorsque vous modifiez
et créez votre code source.
Veillez à choisir une version du JDK supérieure ou égale à celle du JDK. utilisées par les plug-ins que vous utilisez dans votre build Gradle. Pour déterminer la version minimale requise du JDK pour le plug-in Android Gradle (AGP), consultez la tableau de compatibilité dans les notes de version.
Par exemple, le plug-in Android Gradle 8.x nécessite JDK 17. Si vous essayez d'exécuter un build Gradle qui l'utilise avec une version antérieure de le JDK, il signale un message comme:
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`.
Quelles API Java puis-je utiliser dans mon code source Java ou Kotlin ?
Une application Android peut utiliser certaines des API définies dans un JDK, mais pas toutes
parmi d'autres. Le SDK Android définit les implémentations de nombreuses fonctions de la bibliothèque Java.
dans les API disponibles. La propriété compileSdk
spécifie
Version du SDK Android à utiliser lors de la compilation de votre code source Kotlin ou Java.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Chaque version d'Android prend en charge une version spécifique du JDK et un sous-ensemble de
les API Java disponibles. Si vous utilisez une API Java disponible dans
un compileSdk
qui n'est pas disponible dans le
minSdk
, vous pourrez peut-être utiliser l'API
dans la version antérieure d'Android par le biais d'un processus appelé
désucrage.
Consultez la section API Java 11 et versions ultérieures disponibles via le désucrage pour en savoir plus
API.
Utilisez ce tableau pour déterminer la version de Java compatible avec chaque API Android, et où trouver des informations sur les API Java disponibles.
Android | Java | API et fonctionnalités de langage compatibles |
---|---|---|
14 (API 34) | 17 | Bibliothèques principales |
13 (API 33) | 11 | Bibliothèques principales |
12 (API 32) | 11 | API Java |
11 et versions antérieures | Versions d'Android |
Quel JDK compile mon code source Java ?
Le JDK de la chaîne d'outils Java contient le compilateur Java utilisé pour compiler des ressources Java le code source. Ce JDK exécute également Javadoc et des tests unitaires pendant la compilation.
Par défaut, la chaîne d'outils utilise le JDK utilisé pour exécuter Gradle. Si vous utilisez les paramètres par défaut et exécuter un build sur différentes machines (par exemple, votre ordinateur local et un serveur d'intégration continue distinct), les résultats de la compilation peut différer si des versions différentes du JDK sont utilisées.
Pour créer une compilation plus cohérente, vous pouvez spécifier explicitement Version de la chaîne d'outils Java. Spécifier ceci:
- localise un JDK compatible sur le système exécutant la compilation ;
- Si aucun JDK compatible n'existe (et qu'un résolveur de chaîne d'outils est défini) en télécharge un.
- Expose les API Java de chaîne d'outils pour les appels à partir du code source.
- Compile la source Java à l'aide de sa version en langage Java.
- Fournitures par défaut pour
sourceCompatibility
ettargetCompatibility
Nous vous recommandons de toujours spécifier la chaîne d'outils Java, et de vous assurer le JDK spécifié est installé, ou ajoutez un résolveur de chaîne d'outils à votre build.
Vous pouvez spécifier la chaîne d'outils si votre code source est écrit en Java,
Kotlin, ou les deux. Spécifiez la chaîne d'outils au niveau supérieur du module
build.gradle(.kts)
.
Spécifiez la version de la chaîne d'outils Java comme suit:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Cela fonctionne si votre source est Kotlin, Java ou une combinaison des deux.
La version du JDK de la chaîne d'outils peut être identique à celle utilisée pour exécuter Gradle, mais gardez à l'esprit qu'ils servent des objectifs différents.
Quelles fonctionnalités source du langage Java puis-je utiliser dans mon code source Java ?
La propriété sourceCompatibility
détermine les fonctionnalités du langage Java
disponibles lors de la compilation du code source Java.
Cela n'a aucune incidence sur la source Kotlin.
Si aucune valeur n'est spécifiée, la chaîne d'outils Java est utilisée par défaut.
JDK utilisé pour exécuter Gradle. Nous vous recommandons de toujours spécifier explicitement
une chaîne d'outils (recommandé) ou sourceCompatibility
.
Spécifiez sourceCompatibility
dans le fichier build.gradle(.kts)
de votre module.
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Quelles fonctionnalités binaires Java peuvent être utilisées lorsque je compile ma source Kotlin ou Java ?
Spécifier targetCompatibility
et jvmTarget
détermine la méthode
version au format de classe utilisée lors de la génération du bytecode pour les compilations Java et Kotlin
source, respectivement.
Certaines fonctionnalités Kotlin existaient avant l'ajout de fonctionnalités Java équivalentes.
Les premiers compilateurs Kotlin ont dû créer leur propre façon de représenter ces Kotlin.
caractéristiques. Certaines de ces fonctionnalités ont ensuite été ajoutées à Java.
Avec les niveaux jvmTarget
ultérieurs, le compilateur Kotlin peut utiliser directement
la fonctionnalité Java, ce qui peut améliorer les performances.
targetCompatibility
est défini par défaut sur la même valeur que
sourceCompatibility
,
mais si elle est spécifiée, elle doit être supérieure ou égale à sourceCompatibility
.
jvmTarget
utilise par défaut la version de la chaîne d'outils.
Les différentes versions d'Android sont compatibles avec différentes versions de Java. Vous pouvez
des fonctionnalités Java supplémentaires en augmentant
targetCompatibility
et jvmTarget
, mais cela peut vous obliger à
augmentez votre
version minimale du SDK Android pour vous assurer
la fonctionnalité est disponible.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}