Ya sea que tu código fuente esté escrito en Java, Kotlin o ambos, hay varios lugares en los que debes elegir un lenguaje Java o JDK. para tu compilación.
Glosario
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
contiene:
- Herramientas, como compilador, generador de perfiles y creador de archivos. Estos se usan detrás de escena durante tu compilación crear tu aplicación.
- Bibliotecas con APIs a las que puedes llamar desde tu Código fuente de Kotlin o Java Ten en cuenta que no todas las funciones disponibles en Android.
- Java Virtual Machine (JVM), un intérprete que ejecuta aplicaciones de Java. Usa la JVM para ejecutar el IDE de Android Studio. y la herramienta de compilación de Gradle. La JVM no se usa en Android. dispositivos o emuladores.
- Entorno de ejecución de JetBrains (JBR)
- El entorno de ejecución de JetBrains (JBR) es un JDK mejorado que se distribuye con Android Studio. Incluye varias optimizaciones para usar en Studio y JetBrains relacionados. sino que también se puede usar para ejecutar otras aplicaciones de Java.
¿Cómo elijo un JDK para ejecutar Android Studio?
Te recomendamos que uses el JBR para ejecutar Android Studio. Se implementó
con Android Studio, y se usan para probarlo, e incluye mejoras para obtener
Uso de Android Studio. Para asegurarte de que esto suceda, no establezcas STUDIO_JDK
variable de entorno.
Las secuencias de comandos de inicio para Android Studio buscan una JVM en el siguiente pedido:
- Variable de entorno
STUDIO_JDK
- Directorio
studio.jdk
(en la distribución de Android Studio) - Directorio
jbr
(JetBrains Runtime), en Android Studio distribución. Es la opción recomendada. - Variable de entorno
JDK_HOME
- Variable de entorno
JAVA_HOME
- Se puede ejecutar
java
en la variable de entornoPATH
¿Cómo elijo el JDK que ejecuta mis compilaciones de Gradle?
Si ejecutas Gradle con los botones de Android Studio, el JDK establecido en el
La configuración de Android Studio se usa para ejecutar Gradle. Si ejecutas Gradle en una terminal,
ya sea dentro o fuera de Android Studio, la variable de entorno JAVA_HOME
(si se establece) determina qué JDK ejecuta las secuencias de comandos de Gradle. Si JAVA_HOME
Si no está configurado, usa el comando java
en tu entorno PATH
de salida.
Para obtener resultados más coherentes, asegúrate de establecer tu JAVA_HOME
variable de entorno y
Configuración del JDK de Gradle en Android Studio con ese mismo
o usa el JDK.
Cuando ejecutas tu compilación, Gradle crea un proceso llamado daemon para para realizar la compilación. Este proceso se puede reutilizar siempre que las compilaciones usen la misma versión de JDK y Gradle. Reutilizando un daemon reduce el tiempo necesario para iniciar una JVM nueva y, luego, inicializar el sistema de compilación.
Si inicias compilaciones con diferentes JDK o Gradle, las funciones adicionales se crean daemons, por lo que consumen más CPU y memoria.
Configuración de Gradle JDK en Android Studio
Para modificar la configuración de Gradle JDK del proyecto existente, abre Gradle de File (o Android Studio en macOS) > Configuración > Compilación, Ejecución, Implementación > Herramientas de compilación > Gradle El JDK de Gradle el menú desplegable contiene las siguientes opciones para seleccionar:
- Macros como
JAVA_HOME
yGRADLE_LOCAL_JAVA_HOME
- Las entradas de la tabla de JDK en formato
vendor-version
, comojbr-17
, que se almacenan en los archivos de configuración de Android - Cómo descargar un JDK
- Agrega un JDK específico
- JDK detectados de forma local a partir de la instalación predeterminada de JDK del sistema operativo directorio
La opción seleccionada se almacena en la opción gradleJvm
, en
.idea/gradle.xml
del proyecto y su resolución de ruta de JDK se usa para ejecutar
Gradle cuando se inicie a través de Android Studio
Las macros permiten la selección dinámica de la ruta de acceso del JDK del proyecto:
JAVA_HOME
: Usa la variable de entorno con el mismo nombre.GRADLE_LOCAL_JAVA_HOME
: usa la propiedadjava.home
en El archivo.gradle/config.properties
, que se configura de forma predeterminada en el entorno de ejecución de JetBrains.
El JDK seleccionado se usa para ejecutar tu compilación de Gradle y resolver la API de JDK.
referencias cuando edites tus secuencias de comandos de compilación y el código fuente. Ten en cuenta que
compileSdk
especificado restringirá aún más los símbolos de Java
disponibles cuando editas y compilas el código fuente.
Asegúrate de elegir una versión de JDK que sea superior o igual a este las versiones que usan los complementos que usas en tu compilación de Gradle. Para determinar el la versión mínima requerida de JDK para el complemento de Android para Gradle (AGP), consulta el de compatibilidad en las notas de la versión.
Por ejemplo, la versión 8.x del complemento de Android para Gradle requiere JDK 17. Si intentas ejecutar una compilación de Gradle que la usa con una versión anterior de el JDK informa un mensaje como el siguiente:
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`.
¿Qué APIs de Java puedo usar en mi código fuente de Java o Kotlin?
Una aplicación para Android puede usar algunas de las APIs definidas en un JDK, pero no todas
de ellas. El SDK de Android define las implementaciones de muchas funciones de las bibliotecas de Java
como parte de sus APIs disponibles. La propiedad compileSdk
especifica qué
Es la versión del SDK de Android que debes usar cuando compiles tu código fuente de Kotlin o Java.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Cada versión de Android admite una versión específica del JDK y un subconjunto de
las APIs de Java disponibles. Si usas una API de Java disponible en
un objeto compileSdk
que no está disponible en el elemento
minSdk
, es posible que puedas usar la API
en la versión anterior de Android mediante un proceso conocido como
desugaring
Consulta las APIs de Java 11 y versiones posteriores disponibles con la expansión de sintaxis para obtener información sobre la compatibilidad.
APIs
Usa esta tabla para determinar qué versión de Java es compatible con cada API de Android y dónde encontrar detalles sobre las API de Java disponibles.
Android | Java | Funciones de API y de lenguaje compatibles |
---|---|---|
14 (API 34) | 17 | Bibliotecas principales |
13 (API 33) | 11 | Bibliotecas principales |
12 (nivel de API 32) | 11 | API de Java |
11 y versiones anteriores | Versiones de Android |
¿Qué JDK compila mi código fuente de Java?
El JDK de la cadena de herramientas de Java contiene el compilador de Java que se usa para compilar cualquier código de Java. código fuente. Este JDK también ejecuta pruebas de unidades y javadoc durante la compilación.
La cadena de herramientas usa de forma predeterminada el JDK que se usa para ejecutar Gradle. Si usas la configuración predeterminada y ejecutar una compilación en diferentes máquinas (por ejemplo, tu máquina local y en un servidor de integración continua independiente), los resultados de tu compilación puede diferir si se usan diferentes versiones de JDK.
Para crear una compilación más coherente, puedes especificar explícitamente Versión de la cadena de herramientas de Java. Especifica esto:
- Ubica un JDK compatible en el sistema que ejecuta la compilación.
- Si no existe un JDK compatible (y se define un agente de resolución de la cadena de herramientas), descarga una.
- Expone las APIs de Java del conjunto de herramientas para llamadas desde el código fuente.
- Compila el código fuente Java con la versión de lenguaje Java.
- Proporciona valores predeterminados para
sourceCompatibility
ytargetCompatibility
Te recomendamos que siempre especifiques la cadena de herramientas de Java y que te asegures de que en el que se instaló el JDK especificado agente de resolución de la cadena de herramientas a tu compilación.
Puedes especificar la cadena de herramientas si tu código fuente está escrito en Java.
Kotlin o ambos. Especifica la cadena de herramientas en el nivel superior de la API de
build.gradle(.kts)
.
Especifica la versión de la cadena de herramientas de Java de la siguiente manera:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Esto funciona si tu fuente es Kotlin, Java o una combinación de ambos.
La versión del JDK de la cadena de herramientas puede ser la misma que el JDK que se usó para ejecutar Gradle, pero tener en cuenta que tienen diferentes propósitos.
¿Qué funciones de la fuente del lenguaje Java puedo usar en mi código fuente de Java?
La propiedad sourceCompatibility
determina qué funciones del lenguaje Java
que están disponibles durante la compilación del código fuente Java.
No afecta al código fuente de Kotlin.
Si no se especifica, el valor predeterminado es la cadena de herramientas de Java o
Se usa el JDK para ejecutar Gradle. Te recomendamos que siempre especifiques de forma explícita
Una cadena de herramientas (opción preferida) o sourceCompatibility
.
Especifica sourceCompatibility
en el archivo build.gradle(.kts)
de tu módulo.
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
¿Qué funciones binarias de Java se pueden usar cuando compilo mi fuente de Kotlin o Java?
Cuando especificas targetCompatibility
y jvmTarget
, se determina el Java
versión de formato de clase que se usa cuando se genera el código de bytes para Java y Kotlin compilados
respectivamente.
Algunas funciones de Kotlin existían antes de que se agregaran funciones equivalentes de Java.
Los primeros compiladores de Kotlin tuvieron que crear su propia manera de representar esos Kotlin
atributos. Algunas de estas funciones se agregaron posteriormente a Java.
Con niveles posteriores de jvmTarget
, el compilador de Kotlin podría usar directamente
la función de Java, lo que podría mejorar el rendimiento.
targetCompatibility
tiene el mismo valor predeterminado que
sourceCompatibility
,
pero, si se especifica, debe ser mayor o igual que sourceCompatibility
.
jvmTarget
usa de forma predeterminada la versión de la cadena de herramientas.
Las diferentes versiones de Android admiten diferentes versiones de Java. Puedes
aprovechar funciones adicionales de Java aumentando
targetCompatibility
y jvmTarget
, pero esto podría obligarte a realizar también
aumentar su
versión mínima del SDK de Android para garantizar
de que la función esté disponible.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}