Saltar al contenido
K
Tu Mac, listoPaso a paso18 min de lectura · 10 min de máquina Básico

JDK y verificación del entorno

Al terminar: Instalar el JDK 17, entender cómo se relaciona con el del IDE y con Gradle, y pasar el checklist que confirma que todo está en su sitio.

Falta una herramienta antes de escribir código: el JDK, del que dependen varios comandos del curso. Esta lección lo instala, comprueba que el sistema lo ve y repasa que todo lo anterior responde. Parece que ya lo tienes (Android Studio trae un Java dentro), pero eso no basta.

Qué es el JDK, y por qué el 17

Java es otro lenguaje de programación, y Kotlin se apoya en su máquina: el código de Kotlin se traduce a unas instrucciones intermedias, el bytecode, que no entiende el procesador del Mac y que ejecuta la JVM (Java Virtual Machine). El JDK (Java Development Kit) es esa JVM más las herramientas para compilar.

Además, Gradle, la herramienta que compila tus proyectos (la conocerás en Tu primer proyecto en Kotlin y la verás por dentro en Los ficheros de Gradle de tu proyecto), es un programa escrito en Java. Se descarga él mismo el Java con el que funciona, así que de eso no te encargas. Lo que te toca es el JDK 17: el Java con el que se compilará y ejecutará tu código. Se fija en el proyecto con jvmToolchain(17), una línea que dice «este proyecto se compila con Java 17», igual en tu Mac y en cualquier otro (lo harás en Los ficheros de Gradle de tu proyecto). Instálalo para que la Terminal y Xcode lo encuentren, y evitas esperas y errores de red a mitad de lección.

El JDK que trae el IDE no le sirve a nadie más

Android Studio se ejecuta sobre su propio Java, el JetBrains Runtime (jbr; un runtime es lo que hace funcionar un programa, aquí un Java).

El problema empieza cuando Gradle arranca fuera de los botones del IDE, y en el curso lo hace a menudo:

  • ./gradlew desde la Terminal: un script (un fichero con órdenes que se ejecutan una tras otra) que está en la carpeta principal de cada proyecto y que ejecuta la versión de Gradle que el proyecto pide (./ es «el de esta carpeta»).
  • Más adelante, en la Pokédex, Xcode llamará a Gradle por su cuenta, sin pasar por Android Studio, y no sabe nada de su configuración.

Instala el JDK 17

Un JDK instalado con su .pkg (el formato de los instaladores de macOS) se registra en /Library/Java/JavaVirtualMachines, donde lo buscan la Terminal, Gradle y Xcode: es un «paquete del sistema». Uno descomprimido en tu carpeta personal, no.

Sirve cualquier OpenJDK (la versión libre y gratuita de Java); la guía usa Temurin, gratuito y con instalador para Mac:

  1. Abre adoptium.net/temurin/releases en el navegador.
  2. Filtros: macOS, aarch64 (los Mac con chip Apple), 17 - LTS (Long Term Support, una versión con soporte durante años) y JDK.
  3. Descarga el .pkg (se parece a OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.x_x.pkg). Evita el .tar.gz (un archivo comprimido): no se registra en el sistema.
  4. Ábrelo con doble clic y pulsa Continuar e Instalar; macOS pedirá tu contraseña.

Queda en /Library/Java/JavaVirtualMachines/temurin-17.jdk.

Comprueba que el sistema lo ve

La pregunta no es «¿tengo Java?», sino «¿lo ve el sistema?». En una Terminal nueva (la abierta no se entera), pídele la lista de los JDK registrados. La -V es una opción de la orden (como las de las lecciones anteriores): le dice que los liste todos.

/usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    17.0.16 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.16" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

Tu 17.0.x será otro; lo que importa es una línea con 17 y una ruta que acabe en temurin-17.jdk/Contents/Home.

Esta es la comprobación que cuenta: java_home es el registro oficial de JDK de macOS. Si tu 17 no sale ahí, para el sistema no existe, aunque java -version conteste algo. Después mira qué java encuentra la Terminal:

java -version
openjdk version "17.0.16" 2025-07-15 LTS

Con un solo JDK, será el 17. Si dice otro número, tienes más de uno, y es normal mientras el 17 salga en java_home.

Hay dos Java en juego, y no son el mismo

Gradle usa dos Java: uno para funcionar él mismo, que se descarga solo la primera vez (no tienes que hacer nada), y el JDK 17 que acabas de instalar, para compilar y ejecutar tu código. Por eso la primera compilación tarda más. Lo único que te toca es que el 17 salga en java_home, y que ./gradlew encuentre algún java en la Terminal para arrancar (lo busca en la variable JAVA_HOME, si existe, y si no, en el PATH), que el 17 ya cumple.

Resumen: instala el 17 y comprueba que java_home lo lista. De lo demás se ocupa Gradle.

El checklist del entorno

Seis comandos, en una Terminal nueva. Pégalos uno a uno (uno, Intro, mira la respuesta, y el siguiente). Qué comprueba cada uno:

  1. /usr/libexec/java_home -V: tu JDK 17, registrado en el sistema.
  2. java -version: el java de la Terminal (normalmente el 17).
  3. xcodebuild -version: Xcode instalado y con la licencia aceptada.
  4. xcrun simctl list runtimes: al menos un runtime de iOS.
  5. echo $ANDROID_HOME: apunta al SDK.
  6. sdkmanager --list_installed: lista lo instalado en el SDK (plataforma, build-tools, platform-tools, emulator).
/usr/libexec/java_home -V
java -version
xcodebuild -version
xcrun simctl list runtimes
echo $ANDROID_HOME
sdkmanager --list_installed

Y esto responde el Mac donde se probó la guía, en el mismo orden que las órdenes (cada bloque es la respuesta de una):

Matching Java Virtual Machines (1):
    17.0.16 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.16" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
 
openjdk version "17.0.16" 2025-07-15 LTS
…
 
Xcode 26.2
Build version 17C52
 
== Runtimes ==
iOS 18.2 (18.2 - 22C150) - com.apple.CoreSimulator.SimRuntime.iOS-18-2
iOS 26.2 (26.2 - 23C54) - com.apple.CoreSimulator.SimRuntime.iOS-26-2
 
/Users/tu-usuario/Library/Android/sdk
 
Installed packages:
  Path                   | Version | Description                    | Location
  -------                | ------- | -------                        | -------
  build-tools;37.0.0     | 37.0.0  | Android SDK Build-Tools 37     | build-tools/37.0.0
  emulator               | 36.x.x  | Android Emulator               | emulator
  platform-tools         | 37.x.x  | Android SDK Platform-Tools     | platform-tools
  platforms;android-37.0 | 1       | Android SDK Platform 37.0      | platforms/android-37.0

java -version imprime varias líneas; aquí solo se ve la primera. sdkmanager puede mostrar antes de la tabla «Loading package information…» o un aviso (Warning: …) sobre versiones; no es un error. También puede listar más paquetes de los que ves aquí.

Los números pueden diferir (java_home debe incluir un 17; java -version puede mostrar otro). Lo que importa es que ninguna línea esté vacía ni sea un error. Si sdkmanager responde command not found, falta Android SDK Command-Line Tools (latest) (paso 3) o el PATH (paso 4) de Instalar Android Studio y el SDK. Lo de Xcode se arregla en Instalar Xcode y el simulador.

Punto de control

Esta lección no tiene código: se comprueba con la salida de los comandos, en una Terminal recién abierta.

  • El checklist de arriba: los seis comandos responden y ninguno es un error.
  • /usr/libexec/java_home -V lista tu JDK 17 (esta es la comprobación que importa; el del IDE no sale ahí).
  • java -version responde con una versión. Normalmente empieza por openjdk version "17; si muestra otro número, no es un fallo mientras el 17 salga en java_home.
  • sdkmanager --list_installed lista la plataforma, las Build-Tools, las Platform-Tools y el emulador.
  • No has añadido ningún export JAVA_HOME a mano. Todavía no hay motivo.
  • Si algún día Xcode dice Unable to locate a Java Runtime, la lección Ejecutar en iOS lo arregla.

Reto · Ejercicio: ¿cuántos Java hay en tu Mac?

Averigua cuántos JDK tienes de verdad, comparando el registro del sistema con el Java de dentro de Android Studio, y explica por qué el segundo no sale en el primero.

El Java de Android Studio está dentro de la app, en /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java. Puedes ejecutar un programa escribiendo su ruta completa en lugar de su nombre; y las comillas hacen falta por el espacio de «Android Studio». Para preguntarle su versión, usa la misma opción que con java (-version).

Ver solución

Dos comandos, dos respuestas distintas:

/usr/libexec/java_home -V
"/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java" -version

En el Mac donde se probó la guía:

Matching Java Virtual Machines (1):
    17.0.16 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.16" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
 
openjdk version "25.0.3" 2026-04-21
OpenJDK Runtime Environment (build 25.0.3+-15898627-b508.16)

Hay dos JDK en el Mac: un Temurin 17 y un JetBrains Runtime 25. Pero java_home solo ve uno.

El JBR no está instalado: está incrustado en Android Studio.app y nunca se registró en /Library/Java/JavaVirtualMachines, así que ni java_home, ni la Terminal, ni Xcode lo ven. Si fuera tu único Java:

  • java -version en la Terminal fallaría con Unable to locate a Java Runtime.: macOS trae un java que solo sirve para decir que no encuentra ninguno.
  • Más adelante, cuando Xcode lance Gradle, fallaría con ese mismo mensaje.
  • Compilar desde el botón del IDE seguiría funcionando, que es exactamente lo que hace tan difícil de diagnosticar el problema: la mitad de las formas de compilar funcionan.

Que el IDE use su JBR y la Terminal el Temurin 17 es lo normal: no hace falta igualarlos.

Comprueba lo que entendiste

5 preguntas · necesitas 4 para completar la lección

  1. 1.Android Studio trae su propio Java y compila sin quejarse. ¿Por qué la guía exige además un JDK instalado como paquete del sistema?

  2. 2.java -version responde correctamente, pero /usr/libexec/java_home -V no lista ese JDK. ¿Qué significa?

  3. 3.¿Dónde busca la Terminal un programa como java cuando escribes su nombre?

  4. 4.Instalaste el JDK 17 pero java -version en una Terminal nueva dice otra versión. /usr/libexec/java_home -V sí lista tu 17. ¿Qué concluyes?

  5. 5.Tu Terminal usa un JDK 17 del sistema y Android Studio usa su JetBrains Runtime. ¿Es un problema?

Faltan 5 de 5