Nov 21

Ce matin, lors du second épisode du Dév du Jeudi, un participant a demandé comment générer des logs depuis son application…

J’ai profité de la pause-déjeuner pour faire un petit test…

adb shell

adb shell

Pour avoir des logs dynamiques, j’ai utilisé :

Mon téléphone qui est rooté, m’a permis d’installer BusyBox qui est un shell avec plus de commandes, dont tail.
Il me permet également d’accéder à des répertoires qui ne sont pas visible si l’on n’est pas root.

J’ai commencé par écrire une petite application qui génère un fichier de log.
Voici son code source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit uMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Edit, System.IOUtils;

type
  TfrmApp = class(TForm)
    edtTextToLog: TEdit;
    btnAddLogs: TButton;
    btnClearLogs: TButton;
    btnPaths: TButton;
    procedure btnAddLogsClick(Sender: TObject);
    procedure btnClearLogsClick(Sender: TObject);
    procedure btnPathsClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  slLogs: TStringList;
  frmApp: TfrmApp;

implementation

{$R *.fmx}

procedure Log(msg: string);
begin
  if not Assigned(slLogs) then
  begin
    slLogs := TStringList.Create;
  end;

  slLogs.Add(DateTimeToStr(Now) + ' : ' + msg);
  slLogs.SaveToFile(TPath.GetHomePath + PathDelim + 'mylogs');
end;

procedure LogClear;
begin
  if not Assigned(slLogs) then
  begin
    slLogs := TStringList.Create;
  end
  else
  begin
    slLogs.Clear;
  end;
  slLogs.SaveToFile(TPath.GetHomePath + PathDelim + 'mylogs');
end;

procedure TfrmApp.btnAddLogsClick(Sender: TObject);
begin
  Log(edtTextToLog.Text);
end;

procedure TfrmApp.btnClearLogsClick(Sender: TObject);
begin
  LogClear;
end;

procedure TfrmApp.btnPathsClick(Sender: TObject);
begin
  Log('GetHomePath: ' + TPath.GetHomePath);
  Log('GetDocumentsPath: ' + TPath.GetDocumentsPath);
end;

procedure TfrmApp.FormCreate(Sender: TObject);
begin
  Log('FormCreate');
end;

end.

Le FMX de l’interface :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
object frmApp: TfrmApp
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 567
  ClientWidth = 384
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [dkDesktop]
  OnCreate = FormCreate
  DesignerMobile = True
  DesignerWidth = 384
  DesignerHeight = 592
  DesignerDeviceName = 'Google Nexus 4'
  DesignerOrientation = 0
  DesignerOSVersion = ''
  object edtTextToLog: TEdit
    Touch.InteractiveGestures = [igLongTap, igDoubleTap]
    Anchors = [akLeft, akTop, akRight]
    TabOrder = 0
    Text = 'Hello Word!'
    Position.X = 16.000000000000000000
    Position.Y = 16.000000000000000000
    Width = 353.000000000000000000
    Height = 32.000000000000000000
    KillFocusByReturn = False
  end
  object btnAddLogs: TButton
    Anchors = [akLeft, akTop, akRight]
    Height = 44.000000000000000000
    Position.X = 16.000000000000000000
    Position.Y = 64.000000000000000000
    TabOrder = 1
    Text = 'Add'
    Trimming = ttCharacter
    Width = 353.000000000000000000
    OnClick = btnAddLogsClick
  end
  object btnClearLogs: TButton
    Anchors = [akLeft, akTop, akRight]
    Height = 44.000000000000000000
    Position.X = 16.000000000000000000
    Position.Y = 112.000000000000000000
    TabOrder = 2
    Text = 'Clear'
    Trimming = ttCharacter
    Width = 353.000000000000000000
    OnClick = btnClearLogsClick
  end
  object btnPaths: TButton
    Anchors = [akLeft, akTop, akRight]
    Height = 44.000000000000000000
    Position.X = 16.000000000000000000
    Position.Y = 192.000000000000000000
    TabOrder = 3
    Text = 'Paths'
    Trimming = ttCharacter
    Width = 353.000000000000000000
    OnClick = btnPathsClick
  end
end
Application Delphi

Application Delphi

Les différents boutons permettent d’ajouter des logs, de les purger ou de mettre dans les logs des chemins systèmes.

Sur la page suivante, comment j’affiche ensuite dynamiquement le contenu du fichier de log…

Share

Pages : 1 2

Lien permanent vers Logs Android dynamiques avec Delphi Rédigé par Whiler \\ Tags : , , , ,

5 réponses pour “Logs Android dynamiques avec Delphi”

  1. Paul TOTH a dit :

    Il me semble plus judicieux d’utiliser les fonctions de l’unité Androidapi.Log et « adb logcat » ou son intégration sous Eclipse.

    Répondre

  2. Whiler a dit :

    @ Paul TOTH : J’suis d’accord… ce serait bien plus propre/standard…

    Cette méthode peut être plus intéressante pour vérifier le contenu de ses propres fichiers plutot que pour générer des logs…

    Répondre

  3. Dergen a dit :

    Bonjour,

    Perso, je préfère cette solution qui a l’avantage d’être multiplateforme ;)

    Répondre

  4. Whiler a dit :

    @ Dergen : Bonjour,

    Merci pour votre commentaire qui donne un autre point de vue (y)

    Répondre

  5. Pings: Liens de l’épisode 2 de la saison 3 | Le Dev du Jeudi

Laisser une réponse

(requis)

(requis)

*

;) (lol) (y) |-( (hi) 8-) (angel) :s (clap) (bow) (tmi) (:| plus »

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.