Quand la génération de l'APK signé de votre application Android échoue
Vous avez sans doute remarqué, depuis les versions récentes d'Android Studio, la petite astuce qui consistait à aller récupérer dans app\build\outputs\apk\debug le dernier apk généré lors de la compilation de l'application Android sur laquelle vous travaillez, afin de la déposer sur un device Android (par exemple l'envoyer à un copain à vous pour qu'il la teste de chez lui) ne fonctionne plus. Le fichier APK refusera de s'installer !
Il faut donc désormais générer une version signée, comme si vous vous apprêtiez à le déposer sur le store. Si vous avez déjà votre certificat datant d'une précédente publication, essayez de le retrouver, lui et son mot de passe (bon courage. Comme tous les fichiers qu'on utilise une fois toutes les morts d'évêque, on ne se souvient jamais où on l'a rangé).
Pour générer cet APK signé, direction Build > Generate signed Bundl/APK. Et là , au bout de 10 min de moulinage, ça échoue, avec ce message
« Lint found fatal errors while assembling a release target« .
Lint, qu'est ce que c'est ? Un outil qui scanne le code source à la recherche de bugs potentiels. Justement, on aimerait bien qu'il nous précise quelles erreurs il a trouvé ! Tout ce qu'on nous affiche, c'est un bout de code dont on ne sait que faire (a priori un snippet à coller dans build.gradle, et c'est censé désactiver les vérifications Lint, ce qui ne me semble pas vraiment une bonne idée).
La réponse se trouve (comme souvent) sur Stackoverflow, car vous imaginez bien que vous n'êtes pas le premier à qui cela arrive. Le détail des erreurs rencontrées par Lint se trouve dans le sous-répertoire app/build/reports/ de votre application, à l'intérieur d'un fichier lint-results-yourBuildName-fatal.html
Dans mon cas, c'était juste une coquille dans le namespace d'un fichier XML !
Encore une complication inutile qui m'a fait perdre un temps fou, et me fait regretter les anciennes versions d'Android Studio !
v1 ou v2 ?
La fin des ennuis ? Pas vraiment… Mon apk signé n'a accepté de s'installer sur mon Samsung Galaxy S4 que si je choisissais la version V1 (JAR signature). Un apk signé avec la V2 refusait de se déployer. J'ai donc pris l'habitude de toujours exporter mes version signées ainsi…
Jusqu'au jour où j'ai voulu installer un de ces apk sur un émulateur tournant sous Android 11 (API 30). Et là , erreur INSTALL_PARSE_FAILED_NO_CERTIFICATES !
En fait, la v2 a été introduite avec Android 7. Si l'application que vous développez vise des appareils antérieurs à Android 7, il faut utiliser la v1. Donc maintenant, j'exporte en cochant à la fois v1 et v2…
Et attention, ils viennent d'introduire la v3…