2012-02-17 73 views
4

當使用Ant我可以看到詳細的Proguard的輸出編譯我的應用程序,我有事情設置刪除日誌報表(見下文),但是當我運行該版本的apk所有的日誌報表一試圖消除在那裏。Proguard的未刪除記錄呼叫

我有2個項目,其中的每一個包括一個共同的項目。 2個主要項目和公共項目都有一個proguard.cfg文件,所有這些文件都包含用於刪除日誌語句的片段。

有什麼,我失蹤?

**我所有的日誌語句是Log.d(...)

proguard.cfg

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-dontobfuscate 
-forceprocessing 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
} 
+0

只是雙重檢查,因爲你有我擔心。我確實沒有看到我的Log.d o/p用於Ant版本構建。我正在過濾Logcat o/p的PID,我只看到dalvik GC_CONCUURRENT的東西 – NickT 2012-02-17 22:27:47

+0

我有這個問題。我運行Proguard 4.4 – ron 2012-05-05 12:46:34

回答

0

而不是刪除或註釋掉全部採用親衛隊則可以將日誌信息做這樣的事情。創建一個實用工具類,基本上是圍繞着Android日誌系統的包裝

public class Util{ 

    public static boolean showLogs = true; 
    public static String myTag = 'My Tag'; 

    public static void logD(String message){ 
     if (Util.showLogs)  
      Log.d(myTag, message); 
    } 
} 

以前我編譯我的分配程序,我只需撥打showLogs = true;,然後將所有日誌消息supressed

您可以輕鬆地擴展這個類允許您指定標記並生成更多的調試消息。

+0

我不得不在這裏不同意。我依靠一個相同的assumenosideeffects語句從我的項目中刪除日誌行,它的工作原理 - 我沒有在Ant發佈版本中獲得日誌o/p。我proguard.cfg而這其中的唯一區別是我只有一個項目,我不聲明或-dontobfuscate -forceprocessing – NickT 2012-02-17 21:38:19

+0

@NickT:我刪除你提到你不要在你的ProGuard有兩個項目。 cfg文件,但我仍然看到日誌語句。值得一試。 – chris 2012-02-17 21:48:16

+1

@slayton:根據Proguard文檔,「assumenosideeffects」將刪除對似乎沒有副作用與類規範匹配的方法的調用。 http://proguard.sourceforge.net/index.html#manual/usage.html – chris 2012-02-17 21:54:40

1

你不能沒有Proguard的優化使用assumenosideeffects

+0

優化已打開 – 2012-12-11 08:24:37

2

這裏您proguard的文件是好的,但有一個細節,你可能會丟失。

在你gradle這個文件,你可能有這樣的事情:

buildTypes { 
    release { 
     minifyEnabled true 

     proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro' 
    } 
} 

檢查getDefaultProguardFile('proguard-android'),所以如果你打算去優化它,你應該將其更改爲getDefaultProguardFile('proguard-android-optimize.txt')

我花了一些時間來實現它,看到你的問題,但仍然沒能消除對我的代碼我Log電話。所以我發現這個鏈接解釋說需要更改爲優化文件,以便能夠優化。

https://developer.android.com/tools/help/proguard.html#enabling-gradle