Errores de compilación de Gradle en un proyecto Android de WebViewGold: JDK, AGP, cambio de nombre de paquete, keystore y targetSdk con Codex
Las compilaciones de Android fallan por una lista corta de motivos: el JDK equivocado, un Android Studio más antiguo que el proyecto, un cambio de nombre de paquete que se dejó un archivo, un google-services.json del paquete antiguo o un keystore que no coincide. Codex lee la salida de Gradle más rápido que nadie y puede arreglar casi todo en los archivos del proyecto. Aquí tienes el mapa, el prompt seguro y el único archivo que te guardas para ti.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
Garantía de aprobación – o te devolvemos el dinero en 14 días
Sin programar
Pago único, actualizaciones gratuitas
Soporte humano 24/7
Hecho en Alemania desde 2014 · ISO 27001
9:41
Tu app
Tu appYa en tu bolsillo
App Store · Google Play Aprobada
Los archivos detrás de casi todos los errores de compilación de Android
El proyecto Android de WebViewGold es un proyecto normal de Android Studio con un pequeño conjunto de archivos que de verdad tocas. Conocerlos hace que cualquier error de Gradle se entienda:
app/build.gradle: la identidad de la app (applicationId y, en las versiones actuales, namespace para el paquete del código), versionCode y versionName, los niveles de SDK (compileSdk, targetSdk, minSdk), las dependencias y el app ID de OneSignal si usas OneSignal.
Versiones del wrapper de Gradle y del plugin: qué Gradle y qué Android Gradle Plugin (AGP) espera el proyecto. En la plantilla coinciden; los problemas empiezan cuando el IDE es más antiguo que el proyecto o alguien las edita.
app/google-services.json: la configuración de Firebase, emitida para un único nombre de paquete.
res/: strings.xml (nombre de la app y textos), colors.xml, los iconos del launcher en las carpetas mipmap-* y el GIF de la pantalla de inicio.
Y un archivo que no debería estar nunca en la carpeta del proyecto: tu upload keystore.
Errores de Gradle y de Play Console, descifrados
Mensaje
Causa
Solución
¿Codex?
"The project is using an incompatible version (AGP …) of the Android Gradle plugin. Latest supported version is AGP …"
Android Studio es más antiguo que el proyecto
Actualiza Android Studio (Help → Check for Updates) y después File → Sync Project with Gradle Files. No bajes la versión del plugin
Settings → Build, Execution, Deployment → Build Tools → Gradle → Gradle JDK: elige el JDK incluido con Android Studio. En una terminal, apunta JAVA_HOME a ese JDK
Sí
"SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable …"
No hay local.properties (clon nuevo o compilación desde la terminal)
Abre el proyecto una vez en Android Studio, que escribe el archivo, o créalo con sdk.dir; no hagas nunca commit de él
Sí
"Failed to find target with hash string android-…" / "Module … platform android-… not found"
La plataforma del SDK para compileSdk no está instalada
Tools → SDK Manager → instala ese nivel de API, o pulsa "Install missing SDK package(s)" en la ventana Build
Lo explica
"No matching client found for package name …"
google-services.json se emitió para otro nombre de paquete, normalmente el de la plantilla
Registra el nuevo paquete en Firebase y descarga un google-services.json nuevo en app/
Lo encuentra; tú lo descargas
"Duplicate class ….BuildConfig"
Un BuildConfig generado y obsoleto tras cambiar el nombre del paquete
Borra el archivo obsoleto, Build → Clean Project y después Rebuild Project
Sí
"Duplicate resources"
Dos archivos con el mismo nombre de recurso, p. ej. ic_launcher.png e ic_launcher.webp de un generador de iconos
Deja un solo archivo por nombre de recurso
Sí
"resource mipmap/ic_launcher_foreground … not found"
Falta un icono de primer plano en una de las carpetas mipmap
Sustituye los iconos uno a uno, conservando todos los nombres de archivo en todas las carpetas
Sí
"Keystore was tampered with, or password was incorrect"
Contraseña del keystore incorrecta o archivo equivocado
Busca el archivo y la contraseña correctos en tu gestor de contraseñas; no hay forma de recuperarlos
No
Play Console: "Your Android App Bundle is signed with the wrong key"
Firmado con una upload key distinta de la que espera Play
Firma con el upload keystore original; si lo has perdido, solicita un restablecimiento de la upload key en Play Console
Compara las huellas
Play Console: "Version code … has already been used"
No se incrementó el versionCode
Aumenta versionCode (y versionName para los usuarios) en app/build.gradle
Sí
Play Console: "You need to use a different package name because … already exists"
Nunca se cambió el paquete de la plantilla com.webviewgold.myappname
Cambia el nombre del paquete antes de la primera subida (pasos más abajo)
Sí
Aviso o rechazo por el nivel de API objetivo
El bundle se compiló a partir de una plantilla antigua
Actualiza la plantilla y vuelve a compilar (consulta el recuadro de abajo)
Lo explica
Por qué compila en Android Studio pero falla cuando Codex ejecuta Gradle
Codex ejecuta ./gradlew en una terminal, y una terminal no es Android Studio. Tres diferencias explican casi todos los momentos de "pero en el IDE funciona":
JDK. Android Studio usa su JDK incluido; la terminal usa lo que indique JAVA_HOME, que a menudo es un Java antiguo o nada. Apúntalo al JDK incluido (en macOS normalmente /Applications/Android Studio.app/Contents/jbr/Contents/Home) antes de compilar, o pídeselo a Codex.
Ruta del SDK. Android Studio escribe local.properties con sdk.dir; un clon nuevo no lo tiene. Codex puede crearlo con la ruta de tu SDK local, y se queda fuera de Git.
Red. La primera compilación de Gradle descarga plugins y dependencias. Según tus ajustes de aprobación, Codex pregunta antes de ejecutar comandos que necesitan acceso a la red fuera de su sandbox; apruébalo para Gradle o haz tú la primera compilación.
En principio, una tarea en la nube de Codex también puede compilar el proyecto Android, pero solo después de que su script de instalación configure un JDK y el SDK de Android y de que sus reglas de red permitan el Maven de Google y sus hosts de descarga. Para un arreglo puntual, compilar en local es más sencillo.
Con una buena versión optimizada de su aplicación web, puedes tener una impresionante aplicación móvil en un par de minutos. ¡Además del servicio al cliente es muy agradable y muy útil! ¡Puedo recomendar WebViewgold :-)
Julian Koch · Cofundador de Dueldonkey · CodeCanyon
Reúne los datos en un minuto
Ejecútalo en la carpeta del proyecto Android (la que contiene gradlew; en Windows usa gradlew.bat), o deja que lo ejecute Codex. La build de debug comprueba que el proyecto compila sin que intervenga tu clave de firma.
bash
# 1. Gradle version and the JDK Gradle runs on
./gradlew --version
# 2. Debug build with stack trace, log saved for Codex
./gradlew clean assembleDebug --stacktrace 2>&1 | tee gradle.log
# 3. Leftovers of the template package name after a rename
grep -rn "com.webviewgold.myappname" app/ --include=*.java --include=*.xml --include=*.gradle --include=*.json
# 4. Identity, versions and SDK levels Google checks
grep -n "applicationId\|namespace\|versionCode\|versionName\|compileSdk\|targetSdk\|minSdk" app/build.gradle
# 5. The package name your google-services.json was issued for
grep -n "package_name" app/google-services.json
# 6. Your upload key fingerprint (you run this; it asks for the keystore password)
keytool -list -v -keystore ~/keys/upload-keystore.jks
El prompt de triaje para Gradle
Las reglas evitan los dos errores clásicos de los agentes: actualizarlo todo para arreglar un solo error y tocar la firma.
Pégalo en la Codex CLI o en la extensión del IDE, abierta en la carpeta del proyecto Android
Este es el proyecto de Android Studio de WebViewGold para nuestra app. La compilación de Gradle falla. Lee gradle.log (la salida de ./gradlew clean assembleDebug --stacktrace) y arregla la causa.
Datos del proyecto:
- Los ajustes de la app están en Config.java; la identidad, las versiones y los niveles de SDK en app/build.gradle; los textos en res/values/strings.xml.
- Nuestro nombre de paquete: [com.yourbrand.app] (el de la plantilla por defecto era com.webviewgold.myappname).
- Ya subida a Google Play: [sí/no]. Si es que sí, applicationId no puede cambiar.
- Usamos Firebase o push basado en Firebase: [sí/no]. Si es que sí, app/google-services.json tiene que estar emitido para nuestro nombre de paquete.
Reglas:
- Encuentra el primer error real; ignora las advertencias de deprecación.
- No actualices el Android Gradle Plugin, Gradle, Kotlin, compileSdk, targetSdk ni ninguna dependencia salvo que el error lo exija. Si hace falta una actualización, detente y explica por qué y qué versión de Android Studio necesita.
- Si el error tiene que ver con el JDK o con la ruta del SDK, arregla JAVA_HOME o local.properties para esta máquina; no hagas commit de local.properties.
- No crees, muevas, muestres ni hagas commit nunca de un keystore ni de sus contraseñas, y no añadas configuración de firma a build.gradle.
- No edites google-services.json a mano. Si su nombre de paquete no coincide, dime que descargue un archivo nuevo desde la consola de Firebase.
Muestra el diff, ejecuta de nuevo ./gradlew assembleDebug para verificarlo y resume la causa en dos frases.
Cambia el nombre del paquete antes de la primera subida
La plantilla viene con com.webviewgold.myappname, que ya está ocupado en Google Play. Cámbialo una vez, antes de cualquier subida.
Haz commit o una copia de seguridad
La documentación de publicación para Android lo dice claramente: haz una copia de seguridad de la carpeta del código antes de cambiar el nombre. Con Git, un commit es la copia de seguridad.
Elige el nombre definitivo
DNS inverso, en minúsculas, sin guiones e idealmente idéntico a tu bundle ID de iOS. La primera subida a cualquier pista de Play lo bloquea (por qué es permanente).
Cámbialo en todos los sitios donde aparece
Sigue el vídeo sobre el cambio de nombre de la documentación de publicación (la refactorización de Android Studio) o deja que lo haga Codex: applicationId y namespace en app/build.gradle, la línea package al principio de cada archivo Java junto con la ruta de carpetas correspondiente, y AndroidManifest.xml. La documentación también muestra cómo acortar el nombre para quitar la parte del medio.
Sustituye google-services.json
Si usas Firebase o push basado en Firebase, añade en la consola de Firebase una app Android con el nuevo nombre de paquete y sustituye app/google-services.json. Editar el archivo antiguo a mano no es una solución.
Busca restos, limpia y vuelve a compilar
Ejecuta el grep del bloque de arriba hasta que no encuentre nada y después Build → Clean Project y Rebuild Project. Un error "Duplicate class …BuildConfig" en este punto significa que hay un archivo generado obsoleto; bórralo y vuelve a limpiar.
Actualiza todo lo que depende del nombre
Los ajustes de la app en OneSignal y RevenueCat, RATE_MY_APP_URL en Config.java y assetlinks.json en tu dominio si usas App Links.
El keystore: el único archivo que Codex no toca nunca
Google Play solo acepta actualizaciones firmadas con tu upload key, así que el keystore es el archivo más valioso de tu app Android. Créalo una vez con Build → Generate Signed App Bundle or APK en Android Studio, guárdalo fuera de la carpeta del proyecto y conserva el archivo y las dos contraseñas en un gestor de contraseñas, además de una copia de seguridad. Añade *.jks y *.keystore a .gitignore aunque nunca pienses hacer commit de uno.
Con Play App Signing, el estándar para las apps nuevas, Google guarda la clave de firma de la app y tu keystore es solo la upload key. Es una buena noticia si la pierdes: puedes solicitar un restablecimiento de la upload key en Play Console. No es inmediato, así que no cuentes con ello. Lo que no debes hacer nunca es dejar que un agente genere un keystore nuevo "para arreglar" un error de firma en una app que ya está en Google Play, ni pegar las contraseñas en un prompt. Tú ejecutas keytool -list -v y comparas la huella SHA-1 con la que muestra Play Console en su página de integridad de la app; Codex solo necesita el resultado.
Trampas habituales
Dejar que Codex "lo actualice todo" para arreglar un solo error. Los saltos de versión de AGP, Gradle, Kotlin y el SDK provocan errores nuevos en cascada; arregla el error que tienes delante.
Cambiar el nombre del paquete después de la primera subida. Google Play lo trata como una app distinta con una ficha nueva.
Un buscar y reemplazar de "webviewgold" en todo el proyecto. También afecta a nombres de clases, URLs y cadenas que deben quedarse como están; cambia la ruta del paquete, no cada aparición de la palabra.
Subir un APK. Las apps nuevas en Google Play necesitan un App Bundle (.aab).
Olvidarse de incrementar el versionCode en cada subida, incluidas las subidas a pistas de pruebas.
Probar solo la build de debug. Las builds de release aplican las reglas de ProGuard/R8 y tu firma; instala primero el bundle desde una pista de pruebas internas y planifica la prueba cerrada con 12 testers si tu cuenta personal de desarrollador la necesita.
Preguntas frecuentes
¿Puede Codex arreglar errores de Gradle sin tener Android Studio instalado?
Necesita un JDK y el SDK de Android en cualquier caso, y Android Studio es la forma más sencilla de conseguir ambos. Con ellos instalados, Codex puede ejecutar ./gradlew en la terminal y arreglar la mayoría de los errores en los archivos del proyecto.
¿Qué JDK necesita el proyecto Android de WebViewGold?
El que exija la versión del Android Gradle Plugin del proyecto; las versiones actuales del plugin necesitan JDK 17 o posterior. El JDK incluido con un Android Studio actual funciona, y por eso seleccionarlo como Gradle JDK soluciona la mayoría de los errores de JDK.
He perdido mi keystore. ¿He perdido la app?
No si Play App Signing está activado, que es el estándar para las apps nuevas: solicita un restablecimiento de la upload key en Play Console y firma las próximas actualizaciones con la nueva upload key. Sin Play App Signing no puedes actualizar la app y tienes que publicar una nueva.
¿Puedo cambiar el nombre del paquete después de publicar?
No. Un nombre de paquete distinto es una app distinta en Google Play, con una ficha nueva y sin valoraciones. Cámbialo antes de la primera subida a cualquier pista.
¿Debería aumentar yo mismo el targetSdk cuando Google Play lo pida?
Mejor actualiza la plantilla de WebViewGold. Apunta al nivel actual y contiene el código que necesita el nuevo comportamiento; cambiar solo el número puede subirse sin problemas y después romper las notificaciones o la subida de archivos.
Tres formas de llevar tu app a las tiendas
El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.
Hazlo tú mismo
$109 por plataforma, pago único
La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.
Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.