{"id":214,"date":"2021-08-22T21:14:22","date_gmt":"2021-08-22T21:14:22","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=214"},"modified":"2023-10-23T18:54:28","modified_gmt":"2023-10-23T18:54:28","slug":"tester-et-executer-le-projet-android","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/tester-et-executer-le-projet-android\/","title":{"rendered":"Tester et ex\u00e9cuter le projet Android"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Contrairement aux syst\u00e8mes de programmation natifs conventionnels (par exemple, Java sur ordinateur conventionnel) qui sont destin\u00e9s \u00e0 \u00eatre ex\u00e9cut\u00e9s sur le m\u00eame type de machine que le compilateur, AndroidStudio a comme mandat de g\u00e9n\u00e9rer des applications destin\u00e9es \u00e0 \u00eatre ex\u00e9cut\u00e9es sur une autre architecture (un autre type d&rsquo;appareils). C&rsquo;est ce que nous appelons de la compilation crois\u00e9e.<\/p>\n<p>Puisqu&rsquo;Android utilise une architecture interm\u00e9diaire appel\u00e9e JRE (pour Java RunTime Environment), la compilation crois\u00e9e en Android est beaucoup simplifi\u00e9e par rapport \u00e0 d&rsquo;autres types de compilation crois\u00e9e. Nous avons tout de m\u00eame la contrainte que l&rsquo;application doit \u00eatre ex\u00e9cut\u00e9e sur une autre machine que la machine permettant le d\u00e9veloppement.<\/p>\n<p>Afin de tester et d&rsquo;ex\u00e9cuter nos applications Android, nous devons donc avoir une machine permettant l&rsquo;ex\u00e9cution de ce type d&rsquo;application (un appareil Android). Nous avons donc deux possibilit\u00e9s. Nous pouvons ex\u00e9cuter les applications sur des appareils Android physiques (t\u00e9l\u00e9phone, tablette, etc.) ou sur des machines virtuelles s&rsquo;ex\u00e9cutant sur l&rsquo;ordinateur de d\u00e9veloppement.<\/p>\n<h2>Les machines virtuelles Android<\/h2>\n<p>Comme nous l&rsquo;avons indiqu\u00e9 plus haut, Il est possible d&rsquo;utiliser des machines virtuelles afin d&rsquo;ex\u00e9cuter des applications Android sur un ordinateur de bureau (tel que notre environnement de d\u00e9veloppement). Afin de nous aider \u00e0 cr\u00e9er ces machines virtuelles, le SDK d&rsquo;Android fournit un outil appel\u00e9 \u00ab\u00a0AVD Manager\u00a0\u00bb (AVD pour \u00ab\u00a0Android Virtual Devices\u00a0\u00bb). \u00c0 partir d&rsquo;AndroidStudio, il est possible d&rsquo;ex\u00e9cuter l&rsquo;outil \u00ab\u00a0AVD Manager\u00a0\u00bb \u00e0 partir du menu \u00ab\u00a0Tools\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-646 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Menu.png\" alt=\"\" width=\"302\" height=\"424\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Menu.png 377w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Menu-213x300.png 213w\" sizes=\"auto, (max-width: 302px) 100vw, 302px\" \/><\/p>\n<p>Une fois dans l&rsquo;outil \u00ab\u00a0AVD Manager\u00a0\u00bb, afin de cr\u00e9er une nouvelle machine virtuelle, appuyez sur le bouton \u00ab\u00a0Create Virtual Device&#8230;\u00a0\u00bb<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-648 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Create.png\" alt=\"\" width=\"495\" height=\"99\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Create.png 727w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Create-300x60.png 300w\" sizes=\"auto, (max-width: 495px) 100vw, 495px\" \/><\/p>\n<p>Ensuite, vous devez s\u00e9lectionner les caract\u00e9ristiques physiques de l&rsquo;appareil \u00e0 simuler. Notez que tester avec une grande vari\u00e9t\u00e9 de types d&rsquo;appareil (grand \u00e9cran, petit \u00e9cran, multiple r\u00e9solution, ratio largeur\/hauteur, etc.) permet de s&rsquo;assurer que l&rsquo;apparence de l&rsquo;application sera acceptable, peu importe sur quel appareil cette application sera utilis\u00e9e. Notez \u00e9galement qu&rsquo;une machine virtuelle avec une grande r\u00e9solution est plus difficile simuler pour l&rsquo;ordinateur qu&rsquo;un appareil avec une petite r\u00e9solution.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-218 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Hardware.png\" alt=\"\" width=\"492\" height=\"320\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Hardware.png 1004w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Hardware-300x195.png 300w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Hardware-768x500.png 768w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/p>\n<p>Vous devez maintenant choisir une image pour votre machine virtuelle. Il y a des images pour une grande quantit\u00e9 d&rsquo;architecture physique (ABI) et pour une grande quantit\u00e9 d&rsquo;API Android. Pour l&rsquo;architecture de la machine (ABI), \u00e0 moins que vous aviez une r\u00e9ellement bonne raison de devoir tester sur une architecture particuli\u00e8re (par exemple lors d&rsquo;une compilation de module native), vous devriez vous limiter \u00e0 \u00ab\u00a0x86\u00a0\u00bb ou \u00ab\u00a0x86_64\u00a0\u00bb. En ce qui concerne l&rsquo;API, encore une fois, si vous voulez vous assurer que le programme s&rsquo;ex\u00e9cutera de mani\u00e8re similaire, peu importe le type d&rsquo;appareil utilis\u00e9 par l&rsquo;utilisateur, vous devriez tester l&rsquo;application sur une grande quantit\u00e9 d&rsquo;API. Vous devez \u00e9galement d\u00e9cider si vous d\u00e9sirez que le service Google Play soit utilis\u00e9 dans la machine virtuelle.<\/p>\n<p>Il est \u00e0 noter ici qu&rsquo;il est g\u00e9n\u00e9ralement une bonne id\u00e9e de tester avec des API plus anciens ainsi que pour des appareils sans Google Play. Il est important de comprendre que certains utilisateurs ne sont pas en mesure de mettre \u00e0 jour leurs appareils Android (g\u00e9n\u00e9ralement parce que le constructeur ne fournit pas ces mises \u00e0 jour). De plus, certains utilisateurs ont des appareils ne poss\u00e9dant pas le service Google Play (parce que le constructeur ne le fournit pas ou bien pour des raisons de s\u00e9curit\u00e9) et une application n&rsquo;ayant pas besoin de l&rsquo;API Google Play, mais qui sp\u00e9cifie l&rsquo;API Google Play dans son Manifest donnera des messages d&rsquo;erreur \u00e0 l&rsquo;utilisateur au d\u00e9marrage de l&rsquo;application. Le fait de tester sur ce type d&rsquo;appareil permet donc d&rsquo;\u00e9viter des probl\u00e9matiques d&rsquo;utilisation et de viser une utilisation plus vaste de l&rsquo;application.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-219 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Image.png\" alt=\"\" width=\"492\" height=\"320\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Image.png 1004w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Image-300x195.png 300w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Image-768x500.png 768w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/p>\n<p>Il vous reste maintenant \u00e0 donner un nom \u00e0 votre appareil. D&rsquo;autres configurations peuvent \u00eatre int\u00e9ressantes \u00e9galement sur cette page (orientation de l&rsquo;\u00e9cran au d\u00e9marrage, type de cam\u00e9ra, etc.), mais nous ne les couvrirons pas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-220 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Finish.png\" alt=\"\" width=\"492\" height=\"320\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Finish.png 1004w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Finish-300x195.png 300w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Finish-768x500.png 768w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/p>\n<p>Pour d\u00e9marrer une machine virtuelle, vous pouvez cliquer sur le bouton de d\u00e9marrage (la fl\u00e8che) dans l&rsquo;outil \u00ab\u00a0AVD Manager\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-649 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Launch.png\" alt=\"\" width=\"422\" height=\"118\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Launch.png 728w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/08\/AVD_Manager_Launch-300x84.png 300w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/p>\n<p>Si aucune machine virtuelle n&rsquo;est d\u00e9marr\u00e9e lorsque vous allez ex\u00e9cuter l&rsquo;application \u00e0 partir d&rsquo;AndroidStudio, la machine virtuelle sp\u00e9cifi\u00e9e dans les options de d\u00e9marrage d&rsquo;AndroidStudio (s&rsquo;il s&rsquo;agit d&rsquo;une machine virtuelle) sera d\u00e9marr\u00e9e automatiquement.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-224 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Launch_execute.png\" alt=\"\" width=\"392\" height=\"77\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Launch_execute.png 486w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/AVD_Manager_Launch_execute-300x59.png 300w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/p>\n<p>Puisque le d\u00e9marrage d&rsquo;une machine virtuelle peut \u00eatre tr\u00e8s lent, il est recommand\u00e9 de laisser la machine virtuelle en marche une fois l&rsquo;ex\u00e9cution termin\u00e9e si vous croyez qu&rsquo;une nouvelle ex\u00e9cution sera \u00e0 nouveau n\u00e9cessaire rapidement.<\/p>\n<h2>Les appareils physiques<\/h2>\n<p>Il est \u00e9galement possible de tester les applications Android sur des appareils physiques. Cette m\u00e9thode a certains avantages et certains inconv\u00e9nients par rapport \u00e0 tester avec des machines virtuelles.<\/p>\n<p>L&rsquo;avantage majeur de tester avec des machines physiques est la performance de l&rsquo;ex\u00e9cution. Puisqu&rsquo;une machine virtuelle est interpr\u00e9t\u00e9e, une latence non n\u00e9gligeable est in\u00e9vitable. Cette latence est inexistante sur une machine physique.<\/p>\n<p>L&rsquo;inconv\u00e9nient de tester avec un appareil physique est qu&rsquo;il est impossible de tester sur plusieurs types d&rsquo;appareils (\u00e0 moins d&rsquo;avoir physiquement ces appareils). Par exemple, si vous voulez tester avec plusieurs tailles d&rsquo;\u00e9cran diff\u00e9rents, plusieurs API diff\u00e9rents, avec et sans le service Google Play, vous aurez plus de facilit\u00e9 avec des machines virtuelles.<\/p>\n<p>En g\u00e9n\u00e9ral, je recommande aux d\u00e9veloppeurs de tester avec un appareil physique lors du d\u00e9veloppement standard. Ensuite, de temps \u00e0 autre (par exemple, lorsqu&rsquo;un module de l&rsquo;application est termin\u00e9), on peut effectuer des tests sur plusieurs machines virtuelles afin de s&rsquo;assurer que le module d\u00e9velopp\u00e9 se comporte de mani\u00e8re similaire sur chaque type de syst\u00e8me.<\/p>\n<h2>Activer les options pour les concepteurs sur un appareil physique<\/h2>\n<p>En g\u00e9n\u00e9ral, lorsqu&rsquo;un appareil Android est d\u00e9marr\u00e9 pour la premi\u00e8re fois, les options pour les concepteurs (qui permettront \u00e0 votre syst\u00e8me Android de communiquer avec le SDK Android sur votre ordinateur) sont d\u00e9sactiv\u00e9es. Malheureusement, la m\u00e9thode permettant d&rsquo;activer les options pour les concepteurs peut varier entre les diff\u00e9rents appareils. Je vais vous montrer ici la m\u00e9thode pour mes appareils bas\u00e9s sur Android Lineage OS, mais garder en t\u00eate que la m\u00e9canique peut \u00eatre diff\u00e9rentes sur votre propre appareil. En g\u00e9n\u00e9ral, une recherche sur votre moteur de recherche Web pr\u00e9f\u00e9r\u00e9 devrait vous permettre de trouver la m\u00e9thode qui fonctionne sur votre appareil.<\/p>\n<p>Sur mes appareils, pour activer les options pour les concepteurs, vous devez vous rendre dans le menu de param\u00e8tre \u00ab\u00a0\u00c0 propos du T\u00e9l\u00e9phone\u00a0\u00bb (\u00ab\u00a0About Phone\u00a0\u00bb) et appuyer plusieurs fois sur le bouton \u00ab\u00a0Num\u00e9ro de version\u00a0\u00bb (\u00ab\u00a0Build number\u00a0\u00bb).<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-226\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/Developement_option1.png\" alt=\"\" width=\"168\" height=\"300\" \/> &#8212;&#8212; &gt; <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-227\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/Developement_option2.png\" alt=\"\" width=\"166\" height=\"300\" \/><\/p>\n<p>Ensuite, vous devriez avoir acc\u00e8s aux param\u00e8tres syst\u00e8me \u00ab\u00a0Options pour les concepteurs\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-227 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/Developement_option3.png\" alt=\"\" width=\"166\" height=\"300\" \/><\/p>\n<p>Les options accessibles dans le menu d&rsquo;options pour les concepteurs sont souvent tr\u00e8s pointues et ne seront pas toutes pr\u00e9sent\u00e9es dans ce cours. L&rsquo;option important ici est l&rsquo;option permettant d&rsquo;activer le d\u00e9bogage d&rsquo;application.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-227 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/debug_option1.png\" alt=\"\" width=\"166\" height=\"300\" \/><\/p>\n<p>Une fois cette option activ\u00e9e, votre appareil est pr\u00eat pour le d\u00e9veloppement. Lorsque vous connecterez un ordinateur avec AndroidStudio d&rsquo;ouvert (ou avec la commande adb ex\u00e9cut\u00e9e), vous devrez confirmer que vous souhaitez permettre \u00e0 cet ordinateur de tester des applications.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-227 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/debug_option2.png\" alt=\"\" width=\"166\" height=\"300\" \/><\/p>\n<p>\u00c9galement, vous devriez maintenant voir votre appareil dans la liste des machines de tests dans AndroidStudio.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-235 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/debug_option3.png\" alt=\"\" width=\"345\" height=\"61\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/debug_option3.png 529w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/debug_option3-300x53.png 300w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/p>\n<h2>Le Logcat<\/h2>\n<p>Lors du d\u00e9bogage d&rsquo;application, il peut \u00eatre int\u00e9ressant d&rsquo;afficher certaines valeurs de l&rsquo;application pour pouvoir d\u00e9celer ce qui ne fonctionne pas bien. Android permet d&rsquo;afficher des informations dans le Logcat et de lire ce dernier \u00e0 partir de certains outils du SDK Android (dont AndroidStudio).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-237 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat1.png\" alt=\"\" width=\"566\" height=\"185\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat1.png 939w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat1-300x98.png 300w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat1-768x250.png 768w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/p>\n<p>Il est important de savoir que le Logcat affiche les informations de toutes les applications du syst\u00e8me Android. Il peut donc y avoir beaucoup d&rsquo;information \u00e0 traiter. Il est par contre possible de filtrer l&rsquo;information afin d&rsquo;avoir seulement les informations s&rsquo;appliquant \u00e0 l&rsquo;application en cours de d\u00e9veloppement. Il est \u00e9galement possible de filtrer uniquement les informations de \u00ab\u00a0Log\u00a0\u00bb (informatif, erreur, attention, etc.)<\/p>\n<p>Afin d&rsquo;afficher une information dans le Logcat, vous pouvez utiliser l&rsquo;utilitaire \u00ab\u00a0Log\u00a0\u00bb dans le code Java. Il y a plusieurs types d&rsquo;informations qu&rsquo;il est possible d&rsquo;afficher dans le Logcat \u00e0 partir de Log. Les voici:<\/p>\n<ul>\n<li>Log.d : Permets d&rsquo;afficher un message de d\u00e9bogage dans le Logcat;<\/li>\n<li>Log.i : Permets d&rsquo;afficher un message d&rsquo;information dans le Logcat;<\/li>\n<li>Log.w : Permets d&rsquo;afficher un message d&rsquo;attention dans le Logcat;<\/li>\n<li>Log.e : Permets d&rsquo;afficher un message d&rsquo;erreur dans le Logcat.<\/li>\n<\/ul>\n<p>Par exemple, le code suivant:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">Log<\/span><span class=\"o\">.<\/span><span class=\"na\">d<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Mon_Application\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Message de d\u00e9bogage\"<\/span><span class=\"o\">);<\/span>\r\n<span class=\"n\">Log<\/span><span class=\"o\">.<\/span><span class=\"na\">i<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Mon_Application\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Message informatif\"<\/span><span class=\"o\">);<\/span>\r\n<span class=\"n\">Log<\/span><span class=\"o\">.<\/span><span class=\"na\">e<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Mon_Application\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Message d'erreur\"<\/span><span class=\"o\">);<\/span>\r\n<span class=\"n\">Log<\/span><span class=\"o\">.<\/span><span class=\"na\">w<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Mon_Application\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Message d'avertissement\"<\/span><span class=\"o\">);<\/span>\r\n<\/pre>\n<\/div>\n<p>Donnera le r\u00e9sultat suivant:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-238 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat2.png\" alt=\"\" width=\"645\" height=\"213\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat2.png 938w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat2-300x99.png 300w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/08\/logcat2-768x254.png 768w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/p>\n<h2>Compiler en ligne de commande<\/h2>\n<p>Compiler et ex\u00e9cuter dans l&rsquo;interface d&rsquo;AndroidStudio est normalement assez simple. Mais il est g\u00e9n\u00e9ralement une bonne id\u00e9e d&rsquo;avoir une proc\u00e9dure ne n\u00e9cessitant pas un IDE pour compiler et ex\u00e9cuter le programme.<\/p>\n<p>Ainsi, pour compiler le projet en utilisant l&rsquo;interface texte (console), il suffit de lancer la commande suivante \u00e0 la racine du projet:<\/p>\n<p>Sur Windows:<\/p>\n<pre>gradlew.bat build<\/pre>\n<p>Sur Unix (MacOS, Linux, etc.):<\/p>\n<pre>.\/gradlew build<\/pre>\n<p>Note: Si la derni\u00e8re commande donne une erreur similaire \u00e0 celle-ci:<\/p>\n<pre>bash: .\/gradlew: Permission non accord\u00e9e<\/pre>\n<p>Il est probablement n\u00e9cessaire de rendre le programme ex\u00e9cutable avec \u00ab\u00a0chmod\u00a0\u00bb:<\/p>\n<pre>chmod +x gradlew<\/pre>\n<p>Une fois cette commande lanc\u00e9e, le APK se trouve dans le r\u00e9pertoire:<\/p>\n<pre>app\/build\/outputs\/apk\/release<\/pre>\n<p>Malheureusement, ce APK n&rsquo;est pas sign\u00e9 et ne peut donc pas \u00eatre install\u00e9 sur un appareil par un utilisateur (autre qu&rsquo;avec le programme ADB).<\/p>\n<h3>Signer un APK<\/h3>\n<p>Pour signer un APK, il est n\u00e9cessaire de cr\u00e9er une cl\u00e9. Pour cr\u00e9er cette cl\u00e9, utiliser l&rsquo;outil \u00ab\u00a0Generate signed bundle\/APK\u00a0\u00bb dans le menu Build:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"308\" height=\"366\" class=\"alignnone size-medium wp-image-812\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_signed_apk.png\" alt=\"Generate signed APK\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_signed_apk.png 308w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_signed_apk-252x300.png 252w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><\/p>\n<p>Ensuite, s\u00e9lectionnez \u00ab\u00a0APK\u00a0\u00bb et appuyez sur \u00ab\u00a0Next\u00a0\u00bb:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"150\" class=\"alignnone size-medium wp-image-813\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/select_APK.png\" alt=\"APK\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/select_APK.png 388w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/select_APK-300x116.png 300w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><\/p>\n<p>Dans la fen\u00eatre de fichier de cl\u00e9, appuyer sur \u00ab\u00a0Create new&#8230;\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"352\" class=\"alignnone size-medium wp-image-814\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_new.png\" alt=\"\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_new.png 574w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/generate_new-300x184.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/p>\n<p>La fen\u00eatre qui s&rsquo;ouvre servira \u00e0 g\u00e9n\u00e9rer la cl\u00e9. Entrez des informations pour cr\u00e9er cette cl\u00e9. Placer le fichier de cl\u00e9 dans le r\u00e9pertoire \u00ab\u00a0app\u00a0\u00bb du projet. Dans mon exemple, mon fichier s&rsquo;appellera \u00ab\u00a0keystore.jks\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"503\" class=\"alignnone size-medium wp-image-815\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/key_emplacement.png\" alt=\"\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/key_emplacement.png 527w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/key_emplacement-300x286.png 300w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/p>\n<p>Ensuite, inscrivez les mots de passe ainsi que les informations sur la cl\u00e9. Ne pas mettre d&rsquo;information confidentielle si vous d\u00e9cidez de publier cette cl\u00e9 avec votre application. Dans mon exemple, les mots de passe sont \u00ab\u00a0motdepasse\u00a0\u00bb, le nom de la cl\u00e9 est \u00ab\u00a0apk_key\u00a0\u00bb et le \u00ab\u00a0issuer\u00a0\u00bb est \u00ab\u00a0APK Key\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"501\" class=\"alignnone size-medium wp-image-816\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/creation_key.png\" alt=\"\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/creation_key.png 534w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/creation_key-300x281.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/p>\n<p>Enfin, ajouter le code suivant dans la clause \u00ab\u00a0android\u00a0\u00bb \u00e0 l&rsquo;int\u00e9rieur du build.gradle du r\u00e9pertoire app:<\/p>\n<pre>  signingConfigs {\r\n      release {\r\n          storeFile file(\"keystore.jks\")\r\n          storePassword \"motdepasse\"\r\n          keyAlias \"apk_key\"\r\n          keyPassword \"motdepasse\"\r\n      }\r\n  }\r\n  buildTypes {\r\n        release {\r\n            signingConfig signingConfigs.release\r\n        }\r\n    }<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"380\" class=\"alignnone size-medium wp-image-817\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/build_gradle_sign.png\" alt=\"\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/build_gradle_sign.png 443w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2023\/10\/build_gradle_sign-300x257.png 300w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/p>\n<p>Ensuite, si vous compilez avec \u00ab\u00a0gradlew\u00a0\u00bb, une version sign\u00e9e du APK sera cr\u00e9\u00e9e. Cette version peut \u00eatre install\u00e9e sur un appareil.<\/p>\n<p><a href=\"https:\/\/www.louismarchand.me\/index.php\/programmation-android\/\">Retour<\/a><\/p>\n<hr \/>\n<p>Auteur: Louis Marchand<br \/>\n<a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/i.creativecommons.org\/l\/by\/4.0\/80x15.png\" alt=\"Creative Commons License\" \/><\/a><br \/>\nSauf pour les sections sp\u00e9cifi\u00e9es autrement, ce travail est sous licence <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\">Creative Commons Attribution 4.0 International<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Contrairement aux syst\u00e8mes de programmation natifs conventionnels (par exemple, Java sur ordinateur conventionnel) qui sont destin\u00e9s \u00e0 \u00eatre ex\u00e9cut\u00e9s sur le m\u00eame type de machine que le compilateur, AndroidStudio a comme mandat de g\u00e9n\u00e9rer des applications destin\u00e9es \u00e0 \u00eatre ex\u00e9cut\u00e9es sur une autre architecture (un autre type d&rsquo;appareils). C&rsquo;est ce que nous appelons de&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/tester-et-executer-le-projet-android\/\">Continue reading <span class=\"screen-reader-text\">Tester et ex\u00e9cuter le projet Android<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-214","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/comments?post=214"}],"version-history":[{"count":13,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/214\/revisions"}],"predecessor-version":[{"id":820,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/214\/revisions\/820"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}