{"id":5146,"date":"2013-11-21T14:00:33","date_gmt":"2013-11-21T13:00:33","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=5146"},"modified":"2014-03-03T19:44:29","modified_gmt":"2014-03-03T18:44:29","slug":"logs-android-avec-delphi","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2013\/11\/21\/logs-android-avec-delphi\/","title":{"rendered":"Logs Android dynamiques avec Delphi"},"content":{"rendered":"<p>Ce matin, lors du second \u00e9pisode du <a href=\"\/whiler\/2013\/11\/14\/le-dev-du-jeudi-saison-3\/\" title=\"Le D\u00e9v du Jeudi - Saison 3\">D\u00e9v du Jeudi<\/a>, un participant a demand\u00e9 comment g\u00e9n\u00e9rer des logs depuis son application&#8230;<\/p>\n<p>J&rsquo;ai profit\u00e9 de la pause-d\u00e9jeuner pour faire un petit test&#8230;<\/p>\n<div id=\"attachment_5147\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2013\/11\/adb-shell-tail.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5147\" src=\"\/whiler\/wp-content\/uploads\/2013\/11\/adb-shell-tail-300x151.png\" alt=\"adb shell\" width=\"300\" height=\"151\" class=\"size-medium wp-image-5147\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/adb-shell-tail-300x151.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/adb-shell-tail.png 677w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5147\" class=\"wp-caption-text\">adb shell<\/p><\/div>\n<p>Pour avoir des logs dynamiques, j&rsquo;ai utilis\u00e9&nbsp;:<br \/>\n<!--more--><\/p>\n<ul>\n<li>adb shell<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=stericson.busybox&#038;hl=fr\" title=\"BusyBox sur Google Play\" target=\"_blank\">BusyBox<\/a><\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.ttxapps.wifiadb&#038;hl=fr\" title=\"WiFi ADB sur Google Play\" target=\"_blank\">WiFi ADB<\/a><\/li>\n<li><a href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\" title=\"Page officielle de Delphi\" target=\"_blank\">Delphi<\/a>  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/smile.gif\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/li>\n<li>Un <a href=\"\/whiler\/2013\/01\/25\/wiko-cink-slim\/\" title=\"Wiko Cink Slim\" target=\"_blank\">t\u00e9l\u00e9phone <strong>root\u00e9<\/strong><\/a><\/li>\n<\/ul>\n<p>Mon t\u00e9l\u00e9phone qui est root\u00e9, m&rsquo;a permis d&rsquo;installer <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=stericson.busybox&#038;hl=fr\" title=\"BusyBox sur Google Play\" target=\"_blank\">BusyBox<\/a> qui est un shell avec plus de commandes, dont <em>tail<\/em>.<br \/>\nIl me permet \u00e9galement d&rsquo;acc\u00e9der \u00e0 des r\u00e9pertoires qui ne sont pas visible si l&rsquo;on n&rsquo;est pas <em>root<\/em>.<\/p>\n<p>J&rsquo;ai commenc\u00e9 par \u00e9crire une petite application qui g\u00e9n\u00e8re un fichier de log.<br \/>\nVoici son code source&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> uMain<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">UITypes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Classes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Variants<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Controls<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Forms<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Graphics<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Dialogs<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">StdCtrls<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Edit<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">IOUtils<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TfrmApp <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TForm<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; edtTextToLog<span class=\"sy1\">:<\/span> TEdit<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; btnAddLogs<span class=\"sy1\">:<\/span> TButton<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; btnClearLogs<span class=\"sy1\">:<\/span> TButton<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; btnPaths<span class=\"sy1\">:<\/span> TButton<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> btnAddLogsClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> btnClearLogsClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> btnPathsClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> FormCreate<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Private declarations }<\/span><br \/>\n&nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Public declarations }<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; slLogs<span class=\"sy1\">:<\/span> TStringList<span class=\"sy1\">;<\/span><br \/>\n&nbsp; frmApp<span class=\"sy1\">:<\/span> TfrmApp<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.fmx}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> Log<span class=\"br0\">&#40;<\/span>msg<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw1\">not<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>slLogs<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; slLogs <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TStringList<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; slLogs<span class=\"sy1\">.<\/span><span class=\"me1\">Add<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">' : '<\/span> <span class=\"sy3\">+<\/span> msg<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; slLogs<span class=\"sy1\">.<\/span><span class=\"me1\">SaveToFile<\/span><span class=\"br0\">&#40;<\/span>TPath<span class=\"sy1\">.<\/span><span class=\"me1\">GetHomePath<\/span> <span class=\"sy3\">+<\/span> PathDelim <span class=\"sy3\">+<\/span> <span class=\"st0\">'mylogs'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> LogClear<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw1\">not<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>slLogs<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; slLogs <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TStringList<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; slLogs<span class=\"sy1\">.<\/span><span class=\"me1\">Clear<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; slLogs<span class=\"sy1\">.<\/span><span class=\"me1\">SaveToFile<\/span><span class=\"br0\">&#40;<\/span>TPath<span class=\"sy1\">.<\/span><span class=\"me1\">GetHomePath<\/span> <span class=\"sy3\">+<\/span> PathDelim <span class=\"sy3\">+<\/span> <span class=\"st0\">'mylogs'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmApp<span class=\"sy1\">.<\/span><span class=\"me1\">btnAddLogsClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Log<span class=\"br0\">&#40;<\/span>edtTextToLog<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmApp<span class=\"sy1\">.<\/span><span class=\"me1\">btnClearLogsClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; LogClear<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmApp<span class=\"sy1\">.<\/span><span class=\"me1\">btnPathsClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Log<span class=\"br0\">&#40;<\/span><span class=\"st0\">'GetHomePath: '<\/span> <span class=\"sy3\">+<\/span> TPath<span class=\"sy1\">.<\/span><span class=\"me1\">GetHomePath<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Log<span class=\"br0\">&#40;<\/span><span class=\"st0\">'GetDocumentsPath: '<\/span> <span class=\"sy3\">+<\/span> TPath<span class=\"sy1\">.<\/span><span class=\"me1\">GetDocumentsPath<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmApp<span class=\"sy1\">.<\/span><span class=\"me1\">FormCreate<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Log<span class=\"br0\">&#40;<\/span><span class=\"st0\">'FormCreate'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Le FMX de l&rsquo;interface&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">object<\/span> frmApp<span class=\"sy1\">:<\/span> TfrmApp<br \/>\n&nbsp; Left <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; Top <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; Caption <span class=\"sy3\">=<\/span> <span class=\"st0\">'Form1'<\/span><br \/>\n&nbsp; ClientHeight <span class=\"sy3\">=<\/span> <span class=\"nu0\">567<\/span><br \/>\n&nbsp; ClientWidth <span class=\"sy3\">=<\/span> <span class=\"nu0\">384<\/span><br \/>\n&nbsp; FormFactor<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">320<\/span><br \/>\n&nbsp; FormFactor<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">480<\/span><br \/>\n&nbsp; FormFactor<span class=\"sy1\">.<\/span><span class=\"me1\">Devices<\/span> <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>dkDesktop<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; OnCreate <span class=\"sy3\">=<\/span> FormCreate<br \/>\n&nbsp; DesignerMobile <span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><br \/>\n&nbsp; DesignerWidth <span class=\"sy3\">=<\/span> <span class=\"nu0\">384<\/span><br \/>\n&nbsp; DesignerHeight <span class=\"sy3\">=<\/span> <span class=\"nu0\">592<\/span><br \/>\n&nbsp; DesignerDeviceName <span class=\"sy3\">=<\/span> <span class=\"st0\">'Google Nexus 4'<\/span><br \/>\n&nbsp; DesignerOrientation <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; DesignerOSVersion <span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><br \/>\n&nbsp; <span class=\"kw1\">object<\/span> edtTextToLog<span class=\"sy1\">:<\/span> TEdit<br \/>\n&nbsp; &nbsp; Touch<span class=\"sy1\">.<\/span><span class=\"me1\">InteractiveGestures<\/span> <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>igLongTap<span class=\"sy1\">,<\/span> igDoubleTap<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; Anchors <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>akLeft<span class=\"sy1\">,<\/span> akTop<span class=\"sy1\">,<\/span> akRight<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; TabOrder <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; &nbsp; Text <span class=\"sy3\">=<\/span> <span class=\"st0\">'Hello Word!'<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">16.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">16.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Width <span class=\"sy3\">=<\/span> <span class=\"nu0\">353.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Height <span class=\"sy3\">=<\/span> <span class=\"nu0\">32.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; KillFocusByReturn <span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">object<\/span> btnAddLogs<span class=\"sy1\">:<\/span> TButton<br \/>\n&nbsp; &nbsp; Anchors <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>akLeft<span class=\"sy1\">,<\/span> akTop<span class=\"sy1\">,<\/span> akRight<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; Height <span class=\"sy3\">=<\/span> <span class=\"nu0\">44.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">16.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">64.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; TabOrder <span class=\"sy3\">=<\/span> <span class=\"nu0\">1<\/span><br \/>\n&nbsp; &nbsp; Text <span class=\"sy3\">=<\/span> <span class=\"st0\">'Add'<\/span><br \/>\n&nbsp; &nbsp; Trimming <span class=\"sy3\">=<\/span> ttCharacter<br \/>\n&nbsp; &nbsp; Width <span class=\"sy3\">=<\/span> <span class=\"nu0\">353.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; OnClick <span class=\"sy3\">=<\/span> btnAddLogsClick<br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">object<\/span> btnClearLogs<span class=\"sy1\">:<\/span> TButton<br \/>\n&nbsp; &nbsp; Anchors <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>akLeft<span class=\"sy1\">,<\/span> akTop<span class=\"sy1\">,<\/span> akRight<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; Height <span class=\"sy3\">=<\/span> <span class=\"nu0\">44.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">16.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">112.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; TabOrder <span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span><br \/>\n&nbsp; &nbsp; Text <span class=\"sy3\">=<\/span> <span class=\"st0\">'Clear'<\/span><br \/>\n&nbsp; &nbsp; Trimming <span class=\"sy3\">=<\/span> ttCharacter<br \/>\n&nbsp; &nbsp; Width <span class=\"sy3\">=<\/span> <span class=\"nu0\">353.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; OnClick <span class=\"sy3\">=<\/span> btnClearLogsClick<br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">object<\/span> btnPaths<span class=\"sy1\">:<\/span> TButton<br \/>\n&nbsp; &nbsp; Anchors <span class=\"sy3\">=<\/span> <span class=\"br0\">&#91;<\/span>akLeft<span class=\"sy1\">,<\/span> akTop<span class=\"sy1\">,<\/span> akRight<span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; Height <span class=\"sy3\">=<\/span> <span class=\"nu0\">44.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">16.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">192.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; TabOrder <span class=\"sy3\">=<\/span> <span class=\"nu0\">3<\/span><br \/>\n&nbsp; &nbsp; Text <span class=\"sy3\">=<\/span> <span class=\"st0\">'Paths'<\/span><br \/>\n&nbsp; &nbsp; Trimming <span class=\"sy3\">=<\/span> ttCharacter<br \/>\n&nbsp; &nbsp; Width <span class=\"sy3\">=<\/span> <span class=\"nu0\">353.000000000000000000<\/span><br \/>\n&nbsp; &nbsp; OnClick <span class=\"sy3\">=<\/span> btnPathsClick<br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n<span class=\"kw1\">end<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<div id=\"attachment_5148\" style=\"width: 190px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2013\/11\/delphi-logs-android.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5148\" src=\"\/whiler\/wp-content\/uploads\/2013\/11\/delphi-logs-android-180x300.png\" alt=\"Application Delphi\" width=\"180\" height=\"300\" class=\"size-medium wp-image-5148\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/delphi-logs-android-180x300.png 180w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/delphi-logs-android.png 480w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/a><p id=\"caption-attachment-5148\" class=\"wp-caption-text\">Application Delphi<\/p><\/div>\n<p>Les diff\u00e9rents boutons permettent d&rsquo;ajouter des logs, de les purger ou de mettre dans les logs des chemins syst\u00e8mes.<\/p>\n<p>Sur la page suivante, comment j&rsquo;affiche ensuite dynamiquement le contenu du fichier de log&#8230;<br \/>\n<!--nextpage--><br \/>\nDepuis une Invite de commandes, je lance l&rsquo;application <em>adb<\/em> avec comme param\u00e8tre, <em>shell<\/em>. Puis je passe en root (<em>su<\/em>). Pour ensuite afficher mon fichier g\u00e9n\u00e9r\u00e9 depuis Delphi (<em>tail<\/em>)&nbsp;:<\/p>\n<div class=\"codecolorer-container dos dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><div class=\"dos codecolorer\">E:\\Embarcadero\\PlatformSDKs\\adt-bundle-windows-x86-20130522\\sdk\\platform<br \/>\n-tools<span class=\"sy0\">&gt;<\/span>adb shell<br \/>\nshell<span class=\"sy0\">@<\/span>android:\/ $ su<br \/>\nsu<br \/>\nroot<span class=\"sy0\">@<\/span>android:\/ # tail -f -s 2 \/data\/data\/com.embarcadero.AppWithLogs\/files\/mylogs<br \/>\narcadero.AppWithLogs\/files\/mylogs &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span><br \/>\n\u00b4\u2557\u251021\/11\/13 13:33:22 : <span class=\"re0\">FormCreate<\/span><br \/>\n21\/11\/13 13:35:13 : <span class=\"re0\">Hello<\/span> Word<span class=\"sy0\">!<\/span><br \/>\n21\/11\/13 13:35:13 : <span class=\"re0\">Hello<\/span> Word<span class=\"sy0\">!<\/span><br \/>\n21\/11\/13 13:35:16 : <span class=\"re0\">Hello<\/span> Word<span class=\"sy0\">!<\/span><br \/>\n21\/11\/13 13:35:19 : <span class=\"re0\">GetHomePath:<\/span> \/data\/data\/com.embarcadero.AppWithLogs\/files<br \/>\n21\/11\/13 13:35:19 : <span class=\"re0\">GetDocumentsPath:<\/span> \/data\/data\/com.embarcadero.AppWithLogs\/fil<br \/>\nes<br \/>\n21\/11\/13 13:35:20 : <span class=\"re0\">Hello<\/span> Word<span class=\"sy0\">!<\/span><\/div><\/div>\n<p>com.embarcadero.AppWithLogs correspond au nom du package de l&rsquo;application&nbsp;:<br \/>\n<div id=\"attachment_5150\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2013\/11\/package-delphi.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5150\" src=\"\/whiler\/wp-content\/uploads\/2013\/11\/package-delphi-300x239.png\" alt=\"Package Delphi\" width=\"300\" height=\"239\" class=\"size-medium wp-image-5150\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/package-delphi-300x239.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2013\/11\/package-delphi.png 755w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5150\" class=\"wp-caption-text\">Package Delphi<\/p><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce matin, lors du second \u00e9pisode du D\u00e9v du Jeudi, un participant a demand\u00e9 comment g\u00e9n\u00e9rer des logs depuis son application\u2026<\/p>\n<p>J\u2019ai profit\u00e9 de la pause-d\u00e9jeuner pour faire un petit test\u2026<\/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,7,6],"tags":[158,27,154,44,146],"class_list":["post-5146","post","type-post","status-publish","format-standard","hentry","category-android","category-delphi","category-dev","tag-android","tag-coloration-syntaxique","tag-delphi","tag-embarcadero","tag-firemonkey"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/5146","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=5146"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/5146\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=5146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=5146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=5146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}