Erreurs de build Gradle Android dans un projet WebViewGold : JDK, AGP, renommage de package, keystore et targetSdk corrigés avec Codex
Les builds Android échouent pour une courte liste de raisons : le mauvais JDK, un Android Studio plus ancien que le projet, un renommage de package qui a oublié un fichier, un google-services.json émis pour l'ancien package, ou un keystore qui ne correspond pas. Codex lit la sortie de Gradle plus vite que quiconque et peut corriger l'essentiel dans les fichiers du projet. Voici la carte, le prompt sûr et le seul fichier que vous gardez pour vous.
Dès $109 en paiement unique par plateforme, ou notre équipe s'occupe de tout dès $698.
Garantie d'approbation – ou remboursement sous 14 jours
Aucun codage requis
Paiement unique, mises à jour gratuites
Support humain 24/7
Conçu en Allemagne depuis 2014 · ISO 27001
9:41
Votre app
Votre appDésormais dans votre poche
App Store · Google Play Approuvée
Les fichiers derrière presque chaque erreur de build Android
Le projet Android WebViewGold est un projet Android Studio classique, avec un petit nombre de fichiers que vous modifiez réellement. Les connaître rend n'importe quelle erreur Gradle lisible :
app/build.gradle : l'identité de l'app (applicationId et, dans les versions actuelles, namespace pour le package du code), versionCode et versionName, les niveaux de SDK (compileSdk, targetSdk, minSdk), les dépendances et l'app ID OneSignal si vous utilisez OneSignal.
Versions du wrapper Gradle et du plugin : quelle version de Gradle et quel Android Gradle Plugin (AGP) le projet attend. Elles concordent dans le modèle ; les ennuis commencent quand l'IDE est plus ancien que le projet ou que quelqu'un les modifie.
app/google-services.json : la configuration Firebase, émise pour un seul et unique nom de package.
res/ : strings.xml (nom de l'app et textes), colors.xml, les icônes de lancement dans les dossiers mipmap-* et le GIF de l'écran de démarrage.
Et un fichier qui ne devrait jamais se trouver dans le dossier du projet : votre keystore d'importation.
Les erreurs Gradle et Play Console décodées
Message
Cause
Correction
Codex ?
« The project is using an incompatible version (AGP …) of the Android Gradle plugin. Latest supported version is AGP … »
Android Studio est plus ancien que le projet
Mettez Android Studio à jour (Help → Check for Updates), puis File → Sync Project with Gradle Files. Ne rétrogradez pas le plugin
Il explique ; vous mettez l'IDE à jour
« Android Gradle plugin requires Java 17 to run » / « Invalid Gradle JDK configuration found »
Gradle tourne sur le mauvais JDK
Settings → Build, Execution, Deployment → Build Tools → Gradle → Gradle JDK : choisissez le JDK fourni avec Android Studio. Dans un terminal, faites pointer JAVA_HOME vers celui-ci
Oui
« SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable … »
Pas de local.properties (clone neuf ou build depuis un terminal)
Ouvrez une fois le projet dans Android Studio, qui écrit le fichier, ou créez-le avec sdk.dir ; ne le commitez jamais
Oui
« Failed to find target with hash string android-… » / « Module … platform android-… not found »
La plateforme SDK correspondant à compileSdk n'est pas installée
Tools → SDK Manager → installez ce niveau d'API, ou cliquez sur « Install missing SDK package(s) » dans la fenêtre Build
Il explique
« No matching client found for package name … »
google-services.json a été émis pour un autre nom de package, généralement celui du modèle
Enregistrez le nouveau package dans Firebase et téléchargez un nouveau google-services.json dans app/
Il trouve ; vous téléchargez
« Duplicate class ….BuildConfig »
Un BuildConfig généré périmé après un renommage de package
Supprimez le fichier périmé, Build → Clean Project, puis Rebuild Project
Oui
« Duplicate resources »
Deux fichiers avec le même nom de ressource, p. ex. ic_launcher.png et ic_launcher.webp issus d'un générateur d'icônes
Gardez un seul fichier par nom de ressource
Oui
« resource mipmap/ic_launcher_foreground … not found »
Une icône de premier plan manque dans un dossier mipmap
Remplacez les icônes une par une, en gardant chaque nom de fichier dans chaque dossier
Oui
« Keystore was tampered with, or password was incorrect »
Mauvais mot de passe du keystore ou mauvais fichier
Retrouvez le bon fichier et le bon mot de passe dans votre gestionnaire de mots de passe ; aucune récupération n'est possible
Non
Play Console : « Your Android App Bundle is signed with the wrong key »
Signé avec une autre clé d'importation que celle qu'attend Play
Signez avec le keystore d'importation d'origine ; s'il est perdu, demandez une réinitialisation de la clé d'importation dans la Play Console
Il compare les empreintes
Play Console : « Version code … has already been used »
versionCode n'a pas été augmenté
Augmentez versionCode (et versionName pour les utilisateurs) dans app/build.gradle
Oui
Play Console : « You need to use a different package name because … already exists »
Le package du modèle com.webviewgold.myappname n'a jamais été changé
Renommez le package avant le premier envoi (étapes ci-dessous)
Oui
Avertissement ou refus sur le niveau d'API cible
Le bundle a été compilé à partir d'un modèle plus ancien
Mettez le modèle à jour et recompilez (voir l'encadré ci-dessous)
Il explique
Pourquoi le build passe dans Android Studio mais échoue quand Codex lance Gradle
Codex exécute ./gradlew dans un terminal, et un terminal n'est pas Android Studio. Trois différences expliquent la plupart des « mais ça marche dans l'IDE » :
Le JDK. Android Studio utilise son JDK intégré ; le terminal utilise celui vers lequel pointe JAVA_HOME, souvent un vieux Java, voire rien du tout. Faites-le pointer vers le JDK intégré (sur macOS, généralement /Applications/Android Studio.app/Contents/jbr/Contents/Home) avant le build, ou demandez-le à Codex.
Le chemin du SDK. Android Studio écrit local.properties avec sdk.dir ; un clone neuf ne l'a pas. Codex peut le créer avec le chemin de votre SDK local, et il reste hors de Git.
Le réseau. Le premier build Gradle télécharge des plugins et des dépendances. Selon vos réglages d'approbation, Codex demande avant d'exécuter des commandes qui ont besoin du réseau en dehors de son sandbox ; approuvez-le pour Gradle, ou lancez vous-même le premier build.
Une tâche cloud Codex peut en principe compiler aussi le projet Android, mais seulement après que son script d'installation a mis en place un JDK et le SDK Android, et que ses règles réseau autorisent le Maven de Google et ses hôtes de téléchargement. Pour une correction ponctuelle, compiler en local est plus simple.
Avec une bonne version optimisée de votre application Web, vous pouvez avoir une superbe application mobile en quelques minutes. De plus, le service client est très agréable et très utile! Je ne peux que recommander WebViewGold :-)
Julian Koch · Co-fondateur de DuelDonkey · CodeCanyon
Réunissez les faits en une minute
À exécuter dans le dossier du projet Android (celui qui contient gradlew ; sous Windows, utilisez gradlew.bat), ou laissez Codex le faire. Le build debug vérifie que le projet compile sans faire intervenir votre clé de signature.
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
Le prompt de triage Gradle
Les règles empêchent les deux erreurs classiques des agents : tout mettre à jour pour corriger une seule erreur, et toucher à la signature.
À coller dans la CLI Codex ou l'extension IDE, ouverte dans le dossier du projet Android
Voici le projet Android Studio WebViewGold de notre app. Le build Gradle échoue. Lisez gradle.log (la sortie de ./gradlew clean assembleDebug --stacktrace) et corrigez la cause.
Faits sur le projet :
- Les réglages de l'app se trouvent dans Config.java ; l'identité, les versions et les niveaux de SDK dans app/build.gradle ; les textes dans res/values/strings.xml.
- Notre nom de package : [com.yourbrand.app] (la valeur par défaut du modèle était com.webviewgold.myappname).
- Déjà envoyée sur Google Play : [oui/non]. Si oui, applicationId ne doit pas changer.
- Nous utilisons Firebase ou un push basé sur Firebase : [oui/non]. Si oui, app/google-services.json doit être émis pour notre nom de package.
Règles :
- Trouvez la première vraie erreur ; ignorez les avertissements de dépréciation.
- Ne mettez à jour ni l'Android Gradle Plugin, ni Gradle, ni Kotlin, ni compileSdk, ni targetSdk, ni aucune dépendance, sauf si l'erreur l'exige. Si une mise à jour est nécessaire, arrêtez-vous et expliquez pourquoi et quelle version d'Android Studio elle requiert.
- Si l'erreur concerne le JDK ou le chemin du SDK, corrigez JAVA_HOME ou local.properties pour cette machine ; ne commitez pas local.properties.
- Ne créez, ne déplacez, n'affichez et ne commitez jamais un keystore ou ses mots de passe, et n'ajoutez pas de configuration de signature à build.gradle.
- Ne modifiez pas google-services.json à la main. Si son nom de package ne correspond pas, dites-moi de télécharger un nouveau fichier depuis la console Firebase.
Montrez le diff, puis relancez ./gradlew assembleDebug pour vérifier, et résumez la cause en deux phrases.
Renommez le package avant le premier envoi
Le modèle est livré avec com.webviewgold.myappname, déjà pris sur Google Play. Renommez une fois, avant tout envoi.
Commitez ou sauvegardez
La documentation de publication Android le dit clairement : sauvegardez le dossier source avant de renommer. Avec Git, un commit fait office de sauvegarde.
Choisissez le nom définitif
En notation DNS inversée, en minuscules, sans tirets, idéalement identique à votre bundle ID iOS. Le premier envoi sur n'importe quelle piste Play le fige (pourquoi c'est définitif).
Renommez partout où il apparaît
Suivez la vidéo de renommage de la documentation de publication (le refactoring d'Android Studio), ou laissez Codex s'en charger : applicationId et namespace dans app/build.gradle, la ligne package en tête de chaque fichier Java avec le chemin de dossier correspondant, et AndroidManifest.xml. La documentation montre aussi comment raccourcir le nom pour supprimer la partie du milieu.
Remplacez google-services.json
Si vous utilisez Firebase ou un push basé sur Firebase, ajoutez une app Android avec le nouveau nom de package dans la console Firebase et remplacez app/google-services.json. Modifier l'ancien fichier à la main n'est pas une solution.
Cherchez les restes, nettoyez, recompilez
Relancez le grep du bloc ci-dessus jusqu'à ce qu'il ne trouve plus rien, puis Build → Clean Project et Rebuild Project. Une erreur « Duplicate class …BuildConfig » à ce stade signale un fichier généré périmé ; supprimez-le et nettoyez de nouveau.
Mettez à jour tout ce qui dépend du nom
Les réglages d'app OneSignal et RevenueCat, RATE_MY_APP_URL dans Config.java, et assetlinks.json sur votre domaine si vous utilisez les App Links.
Le keystore : le seul fichier auquel Codex ne touche jamais
Google Play n'accepte les mises à jour que si elles sont signées avec votre clé d'importation : le keystore est donc le fichier le plus précieux de votre app Android. Créez-le une seule fois avec Build → Generate Signed App Bundle or APK dans Android Studio, stockez-le en dehors du dossier du projet, et conservez le fichier et ses deux mots de passe dans un gestionnaire de mots de passe, avec une sauvegarde. Ajoutez *.jks et *.keystore au .gitignore, même si vous ne comptez jamais en commiter un.
Avec la signature d'apps par Google Play (Play App Signing), la norme pour les nouvelles apps, Google conserve la clé de signature de l'app et votre keystore n'est que la clé d'importation. C'est une bonne nouvelle si vous la perdez : vous pouvez demander une réinitialisation de la clé d'importation dans la Play Console. Ce n'est pas instantané, donc ne comptez pas dessus. Ce que vous ne devez jamais faire, c'est laisser un agent générer un nouveau keystore « pour corriger » une erreur de signature sur une app déjà publiée sur Google Play, ou coller les mots de passe dans un prompt. C'est vous qui exécutez keytool -list -v et comparez l'empreinte SHA-1 avec celle qu'affiche la Play Console sur sa page d'intégrité de l'app ; Codex n'a besoin que du résultat.
Pièges
Laisser Codex « tout mettre à jour » pour corriger une seule erreur. Les montées de version d'AGP, de Gradle, de Kotlin et du SDK entraînent des erreurs en cascade ; corrigez l'erreur qui est là.
Renommer le package après le premier envoi. Google Play le traite comme une autre app, avec une nouvelle fiche.
Un rechercher-remplacer de « webviewgold » dans tout le projet. Il touche aussi des noms de classes, des URL et des chaînes qui doivent rester ; renommez le chemin du package, pas chaque occurrence du mot.
Envoyer un APK. Les nouvelles apps sur Google Play ont besoin d'un App Bundle (.aab).
Oublier d'augmenter versionCode à chaque envoi, y compris sur les pistes de test.
Ne tester que le build debug. Les builds de release appliquent les règles ProGuard/R8 et votre signature ; installez d'abord le bundle depuis une piste de test interne, et prévoyez le test fermé à 12 testeurs si votre compte développeur personnel l'exige.
Questions fréquentes
Codex peut-il corriger les erreurs Gradle sans qu'Android Studio soit installé ?
Il a besoin d'un JDK et du SDK Android dans tous les cas, et Android Studio est le moyen le plus simple d'obtenir les deux. Une fois ceux-ci installés, Codex peut lancer ./gradlew dans le terminal et corriger la plupart des erreurs dans les fichiers du projet.
De quel JDK le projet Android WebViewGold a-t-il besoin ?
De celui qu'exige la version de l'Android Gradle Plugin du projet ; les versions actuelles du plugin nécessitent le JDK 17 ou plus récent. Le JDK fourni avec un Android Studio récent fonctionne, c'est pourquoi le sélectionner comme Gradle JDK corrige la plupart des erreurs de JDK.
Pas si Play App Signing est activé, ce qui est la norme pour les nouvelles apps : demandez une réinitialisation de la clé d'importation dans la Play Console et signez les futures mises à jour avec la nouvelle clé d'importation. Sans Play App Signing, vous ne pouvez plus mettre l'app à jour et devez en publier une nouvelle.
Puis-je changer le nom de package après la publication ?
Non. Un autre nom de package est une autre app sur Google Play, avec une nouvelle fiche et sans les notes. Renommez avant le premier envoi sur n'importe quelle piste.
Dois-je relever targetSdk moi-même quand Google Play le demande ?
Mettez plutôt à jour le modèle WebViewGold. Il cible le niveau actuel et contient le code dont le nouveau comportement a besoin ; une simple modification du chiffre peut passer à l'envoi, puis casser les notifications ou les téléversements de fichiers.
Trois façons de mettre votre app dans les stores
Même résultat, charge de travail différente de votre côté. Les trois formules incluent la garantie d'approbation et le support humain 24/7.
Faites-le vous-même
$109 par plateforme, paiement unique
La licence WebViewGold : un projet Xcode ou Android Studio prêt à l'emploi. Collez votre URL, définissez le nom et l'icône, activez les fonctionnalités, compilez et soumettez. Mises à jour gratuites à vie.
Ni Mac, ni Xcode, ni Android Studio : configurez dans le navigateur, nous compilons les deux apps dans le cloud et les transmettons à App Store Connect et à la Play Console.
Envoyez-nous votre URL et votre icône. Notre équipe configure, compile et livre votre app sous 72 heures, en marque blanche, projets sources inclus. Les deux plateformes pour $1,158.
Les remboursements sont accordés aux conditions indiquées dans notre FAQ : un refus non lié au contenu par Apple et/ou Google, demandé dans les 14 jours suivant l'achat.