2016-10-18 9 views
3

inb4 duplizierenWie ein Verfahren zum Entfernen ProGuard mit

Ich weiß, es gibt viele Fragen/Blogs vorhanden, wie Logging-Code von einer App mit ProGuard zu entfernen, habe ich diese Lösungen ausprobiert und sie arbeiten, wie sie sind entworfen, um. Mein Problem ist etwas anders. In meiner App habe ich die Standardprotokollierungsmethoden oder System.out.println() nicht direkt von überall verwendet. Stattdessen habe ich eine benutzerdefinierte Methode, die System.out.println() aufruft und diese Methode() wird von meiner App jedes Mal aufgerufen, wenn sie etwas protokolliert. Es gibt einen Grund, warum ich diese Methode benötige.

Meine public static void log()-Methode befindet sich in einer Klasse namens MyApplication, die die Standardklasse Application überschreibt. Ich habe diese ProGuard Regel aus here:

-assumenosideeffects class java.io.PrintStream { 
    public void println(%); 
    public void println(**); 
} 

Dies beseitigt erfolgreich direkte Verwendungen von System.out.println(), einschließlich von MyApplication.log(). Aber wenn ich diese sehr Regel verwenden, indem sie zwicken MyApplication.log() zu entfernen, funktioniert es nicht:

-assumenosideeffects class changed.package.name.MyApplication { 
    public static void log(...); 
} 

Es gibt zwei Versionen des log():

  1. log(String)
  2. log(String, int)

Keiner von ihnen wird entfernt. Die Methode wird auf m17739c() verschleiert, ich habe diesen Methodennamen sogar (kindisch) in der Regel hinzugefügt. Es hat immer noch nicht funktioniert.

Ich glaube nicht, -assumenosideeffects wurde speziell für die Standard-Protokollierungsmethoden entwickelt. Was mache ich hier falsch?

+0

Ich habe genau das gleiche Problem. Hast du eine Lösung gefunden? – Anonymous

+0

@Anonymous, nein. Musste es umgehen. – SlashG

Antwort

-1
private final static boolean isPrint = BuildConfig.DEBUG; 

public static void log(...){ 

if (isPrint) 
{ 
     Log.i(Tag, msg); 
    } 
} 

Dieses Isprint Variable und den Zustand in Ihrem code.if Sie progaurd und erstellen freigegeben Build melden Sie sich dann nicht angezeigt werden hinzuzufügen.

Dieses Protokoll zeigt nur die App an, die im Debug-Modus ausgeführt wird.

Es funktioniert für mich. Es ist hilfreich für Sie.

+0

Danke für die Antwort. Meine 'log()' Methode macht etwas ähnliches. Sogar meine Protokolle werden in der Produktion nicht angezeigt. Ich möchte Aufrufe der 'log()' Funktion entfernen, um die Sicherheit meiner App zu verbessern. – SlashG

+0

Genau das, was ich in meiner Frage angegeben habe. Die ProGuard-Regel, die ich verwenden möchte, funktioniert nicht wie erwartet. – SlashG

+0

Ich habe Ihnen bereits gesagt, dass meine 'log()' Methode das Gleiche tut. ** Meine Protokolle erscheinen nicht in Produktions-Builds **. Ich möchte Aufrufe der Methode aus meiner Produktion APK mit ProGuard entfernt. Bitte antworten Sie, wenn Sie es wissen, Ihr Code löst mein Problem nicht. – SlashG

Verwandte Themen