{"id":2752,"date":"2011-09-02T13:30:58","date_gmt":"2011-09-02T11:30:58","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=2752"},"modified":"2012-03-03T05:27:46","modified_gmt":"2012-03-03T04:27:46","slug":"update-apk-resources","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2011\/09\/02\/update-apk-resources\/","title":{"rendered":"Modifier des ressources dans un APK"},"content":{"rendered":"<p>De temps en temps, on trouve une superbe application sur le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Android_Market\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Market Android\" style=\"\" >Market Android<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> mais on n&rsquo;aime pas une traduction ou une image&#8230;<\/p>\n<p>On peut alors \u00e9crire au d\u00e9veloppeur et esp\u00e9rer qu&rsquo;il prenne en consid\u00e9ration notre demande. En g\u00e9n\u00e9ral, \u00e7a se passe plut\u00f4t bien  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/yes.gif\" alt=\"(y)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\nDe m\u00eame, on trouve une application qui est en anglais et on la voudrait en fran\u00e7ais&#8230; Lorsque cela m&rsquo;arrive, voila comment je proc\u00e8de&nbsp;:<\/p>\n<ul>\n<li>Je r\u00e9cup\u00e8re l&rsquo;APK sur mon PC (ES File Explorer, MyPhoneExplorer, &#8230;)<\/li>\n<li>Je la d\u00e9compile<\/li>\n<li>Je modifie les fichiers XML contenant les cha\u00eenes en anglais pour les remplacer par des cha\u00eenes en fran\u00e7ais<\/li>\n<li>Je recompile l&rsquo;application<\/li>\n<li>Je d\u00e9sinstalle l&rsquo;application d&rsquo;origine<\/li>\n<li>J&rsquo;installe l&rsquo;application recompil\u00e9e<\/li>\n<li>Je valide que les cha\u00eenes ne sont pas trop longues pour les composants qui les affichent<\/li>\n<li>Lorsque cela me convient, j&rsquo;envoie les fichiers XML au d\u00e9veloppeur pour qu&rsquo;il int\u00e8gre ma traduction dans une prochaine version&#8230;<\/li>\n<\/ul>\n<p>Les rares fois o\u00f9 je l&rsquo;ai fait, les d\u00e9veloppeurs \u00e9taient ravis d&rsquo;obtenir une traduction cl\u00e9 en main <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/happy.gif\" alt=\"(lol)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Mais pour d\u00e9compiler et recompiler une application&#8230; comment fait-on&nbsp;?<br \/>\n<!--more--><\/p>\n<p>J&rsquo;utilise un programme OpenSource qui est disponible depuis <a href=\"https:\/\/code.google.com\/p\/android-apktool\/\" title=\"A tool for reengineering Android apk files\" target=\"_blank\">ce site<\/a>, Apktool.<br \/>\nComme pr\u00e9requis \u00e0 ce qui va suivre, je sp\u00e9cifie qu&rsquo;un SDK Android doit \u00eatre install\u00e9 (et donc Java). Ce n&rsquo;est peut-\u00eatre pas obligatoire, mais comme c&rsquo;est le cas dans mon installation, je vais, au cas o\u00f9, dire que c&rsquo;est n\u00e9cessaire.  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/dull.gif\" alt=\"|-(\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Puisque le SDK d&rsquo;Android est install\u00e9, nous devons avoir le fichier <em>aapt.exe<\/em> qui se trouve dans le sous-r\u00e9pertoire <em>platform-tools<\/em> de votre installation.<\/p>\n<p>On t\u00e9l\u00e9charge les fichiers <em>apktool*<\/em> et <em>apktool-install-windows*<\/em> de <a href=\"https:\/\/code.google.com\/p\/android-apktool\/downloads\/list\" title=\"Fichiers \u00e0 t\u00e9l\u00e9charger\" target=\"_blank\">cette page<\/a>.<\/p>\n<p>On extrait le contenu des archives dans le r\u00e9pertoire de son choix. Par exemple, <em>R:\\apktool\\<\/em><\/p>\n<p>On va ensuite modifier la variable syst\u00e8me d&rsquo;environnement <em>Path<\/em>. Pour cela, on peut passer par (sous Windows 7)&nbsp;:<\/p>\n<ul>\n<li><em>Panneau de configuration\\Tous les Panneaux de configuration\\Syst\u00e8me<\/em><\/li>\n<li>Click droit sur <em>Ordinateur<\/em>, <em>Propri\u00e9t\u00e9s<\/em><\/li>\n<\/ul>\n<p>Puis on clique sur <em>Param\u00e8tres syst\u00e8me avanc\u00e9s<\/em>.<br \/>\nOn clique sur le bouton <em>Variables d&rsquo;environnement&#8230;<\/em> de l&rsquo;onglet <em>Param\u00e8tres syst\u00e8me avanc\u00e9s<\/em>.<br \/>\n<div id=\"attachment_2755\" style=\"width: 269px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/proprietes_systeme.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2755\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/proprietes_systeme-259x300.jpg\" alt=\"Propri\u00e9t\u00e9s Syst\u00e8me\" title=\"Propri\u00e9t\u00e9s Syst\u00e8me\" width=\"259\" height=\"300\" class=\"size-medium wp-image-2755\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/proprietes_systeme-259x300.jpg 259w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/proprietes_systeme.jpg 426w\" sizes=\"auto, (max-width: 259px) 100vw, 259px\" \/><\/a><p id=\"caption-attachment-2755\" class=\"wp-caption-text\">Propri\u00e9t\u00e9s Syst\u00e8me<\/p><\/div><br \/>\nDans la seconde liste, <em>Variables syst\u00e8me<\/em>, on se positionne sur <em>Path<\/em> et on la modifie (bouton <em>Modifier&#8230;<\/em> ou double-clique).<br \/>\n<div id=\"attachment_2757\" style=\"width: 281px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/variables_environnement.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2757\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/variables_environnement-271x300.jpg\" alt=\"Variables d&#039;environnement\" title=\"Variables d&#039;environnement\" width=\"271\" height=\"300\" class=\"size-medium wp-image-2757\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/variables_environnement-271x300.jpg 271w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/variables_environnement.jpg 394w\" sizes=\"auto, (max-width: 271px) 100vw, 271px\" \/><\/a><p id=\"caption-attachment-2757\" class=\"wp-caption-text\">Variables d&#039;environnement<\/p><\/div><br \/>\nA la fin des valeurs d\u00e9j\u00e0 pr\u00e9sentes, on ajoute les deux r\u00e9pertoires n\u00e9cessaires&nbsp;:<\/p>\n<ul>\n<li>le chemin complet vers le sous-r\u00e9pertoire <em>platform-tools<\/em><\/li>\n<li>le chemin complet vers le r\u00e9pertoire o\u00f9 on a extrait les fichiers, dans mon exemple, <em>R:\\apktool\\<\/em><\/li>\n<\/ul>\n<div id=\"attachment_2758\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/path.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2758\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/path-300x115.jpg\" alt=\"Path\" title=\"Path\" width=\"300\" height=\"115\" class=\"size-medium wp-image-2758\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/path-300x115.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/path.jpg 397w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2758\" class=\"wp-caption-text\">Path<\/p><\/div>\n<p>L&rsquo;environnement est pr\u00eat. Il ne reste plus qu&rsquo;\u00e0 <a href=\"\/whiler\/2011\/09\/02\/update-apk-resources\/2\/\" title=\"Page suivante\">s&rsquo;en servir<\/a>  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/happy.gif\" alt=\"(lol)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<!--nextpage--><br \/>\nSur la <a href=\"\/whiler\/2011\/09\/02\/update-apk-resources\/\" title=\"Page pr\u00e9c\u00e9dente\">page pr\u00e9c\u00e9dente<\/a>, on a vu comment installer son environnement en vue de d\u00e9compiler, puis de recompiler une application Android.<\/p>\n<p>J&rsquo;ai d\u00e9j\u00e0 r\u00e9cup\u00e9r\u00e9 l&rsquo;apk qui m&rsquo;int\u00e9resse, par exemple, <em>wFlowHelper.apk<\/em> que je mets dans un r\u00e9pertoire <em>R:\\apks\\<\/em><br \/>\nJ&rsquo;ouvre une Invite de commandes, je me place dans le r\u00e9pertoire o\u00f9 est mon APK et je la d\u00e9compile avec la commande&nbsp;: <code class=\"codecolorer dos dawn\"><span class=\"dos\">apktool d wFlowHelper.apk<\/span><\/code><br \/>\n<div id=\"attachment_2760\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/decompile.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2760\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/decompile-300x151.jpg\" alt=\"D\u00e9compiler\" title=\"D\u00e9compiler\" width=\"300\" height=\"151\" class=\"size-medium wp-image-2760\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/decompile-300x151.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/decompile.jpg 677w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2760\" class=\"wp-caption-text\">D\u00e9compiler<\/p><\/div><br \/>\nUn sous-r\u00e9pertoire est alors cr\u00e9\u00e9, du nom de l&rsquo;APK, contenant les diff\u00e9rents fichiers dont les ressources, <em>res<\/em>&nbsp;:<br \/>\n<div id=\"attachment_2761\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/resources.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2761\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/resources-300x137.jpg\" alt=\"Ressources\" title=\"Ressources\" width=\"300\" height=\"137\" class=\"size-medium wp-image-2761\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/resources-300x137.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/resources.jpg 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2761\" class=\"wp-caption-text\">Ressources<\/p><\/div><br \/>\nUne fois qu&rsquo;on a apport\u00e9 les modifications souhait\u00e9es, il faut le recompiler afin de pouvoir l&rsquo;installer.<br \/>\nPour cela, on utilise cette ligne de commande&nbsp;: <code class=\"codecolorer dos dawn\"><span class=\"dos\">apktool b wFlowHelper<\/span><\/code><br \/>\n<div id=\"attachment_2762\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/compile.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2762\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/compile-300x151.jpg\" alt=\"Compiler\" title=\"Compiler\" width=\"300\" height=\"151\" class=\"size-medium wp-image-2762\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/compile-300x151.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/compile.jpg 677w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2762\" class=\"wp-caption-text\">Compiler<\/p><\/div><br \/>\nSi tout ce passe bien, l&rsquo;application recompil\u00e9e a \u00e9t\u00e9 cr\u00e9\u00e9e dans le sous-r\u00e9pertoire <em>dist<\/em>&nbsp;:<br \/>\n<div id=\"attachment_2763\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/new_build.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2763\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/new_build-300x137.jpg\" alt=\"APK recompil\u00e9\" title=\"APK recompil\u00e9\" width=\"300\" height=\"137\" class=\"size-medium wp-image-2763\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/new_build-300x137.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/new_build.jpg 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2763\" class=\"wp-caption-text\">APK recompil\u00e9<\/p><\/div><\/p>\n<p>Il ne vous reste plus qu&rsquo;\u00e0 supprimer l&rsquo;application d&rsquo;origine de votre t\u00e9l\u00e9phone, et installer celle-ci \u00e0 sa place pour la tester. Vous pouvez \u00e9galement la tester dans l&rsquo;\u00e9mulateur afin de conserver l&rsquo;original sur votre t\u00e9l\u00e9phone  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><img decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2010\/08\/stat_sys_warning_red.png\" alt=\"Attention !\" \/> L&rsquo;application ainsi compil\u00e9e n&rsquo;a pas \u00e9t\u00e9 sign\u00e9e et elle ne provient plus du Market. Vous devrez imp\u00e9rativement cocher l&rsquo;option <em>Sources inconnues<\/em> pour pouvoir l&rsquo;installer&nbsp;:<br \/>\n<div id=\"attachment_2764\" style=\"width: 190px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/09\/sources_inconnues.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2764\" src=\"\/whiler\/wp-content\/uploads\/2011\/09\/sources_inconnues-180x300.jpg\" alt=\"Sources inconnues\" title=\"Sources inconnues\" width=\"180\" height=\"300\" class=\"size-medium wp-image-2764\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/sources_inconnues-180x300.jpg 180w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/09\/sources_inconnues.jpg 480w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/a><p id=\"caption-attachment-2764\" class=\"wp-caption-text\">Sources inconnues<\/p><\/div><\/p>\n<p> (arrow) Cet article est succinct&#8230; il a pour but d&rsquo;aider ceux qui souhaiteraient tester leurs propres traductions, images dans des applications Android, et qui ne sauraient pas par o\u00f9 commencer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De temps en temps, on trouve une superbe application sur le Market Android mais on n\u2019aime pas une traduction ou une image\u2026<\/p>\n<p>On peut alors \u00e9crire au d\u00e9veloppeur et esp\u00e9rer qu\u2019il prenne en consid\u00e9ration notre demande. En g\u00e9n\u00e9ral, \u00e7a se passe plut\u00f4t bien :cool:<br \/>\nDe m\u00eame, on trouve une application qui est en anglais et on la voudrait en fran\u00e7ais\u2026 Lorsque cela m\u2019arrive, voila comment je proc\u00e8de&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[132],"tags":[158,134],"class_list":["post-2752","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-java"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=2752"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2752\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=2752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=2752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=2752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}