2015-05-23 90 views
0

so ..我使用Log.d(「」,「」);在我的應用程序的許多地方進行調試。 但我不想在商店中使用這些日誌。Android什麼是隱藏日誌的最佳方式?

現在爲了隱藏他們在店裏的版本,我創建了一個Constant.class,把一個布爾那裏叫debugMode,幷包裹每個登錄我有在if這樣的語句:

if (Constant.debugMode) { 
Log.d(TAG, "check123"); 
} 

然後當我建立一個谷歌商店的apk更改該布爾值爲true而不是false。

這在我看來很笨拙,還有沒有更有效的方法來做到這一點?

回答

1

讓有公共靜態方法和SWICH只啓用了您的應用程序的調試版本日誌的簡單記錄器類。這是一個示例代碼。

public class Logger { 

    public static final boolean D = BuildConfig.DEBUG; 

    public static void LogInfo(String TAG, String msg) { 
     if (D) { 
      Log.i(TAG, msg); 
     } 
    } 

    public static void LogWarrning(String TAG, String msg) { 
     if (D) { 
      Log.w(TAG, msg); 
     } 
    } 

    public static void LogDebug(String TAG, String msg) { 
     if (D) { 
      Log.d(TAG, msg); 
     } 
    } 

    public static void LogError(String TAG, String msg) { 
     if (D) { 
      Log.e(TAG, msg); 
     } 
    } 
} 

使用

Logger.LogDebug("Test", "Example"); 

這樣你可以保持在一個地方,如果條款和不必擔心。我也不認爲這樣笨拙。

0

我找到一個更容易的解決方案是將所有的檢查,如果忘記了遍佈 的地方,只是搭配使用ProGuard來剔除任何Log.d()或Log.v()當我們調用 方法調用我們Ant釋放目標。

這樣,我們總是會輸出調試信息用於常規的 構建,並且不必對發佈構建進行任何代碼更改。 ProGuard還可以對字節碼進行多次傳遞,以刪除其他不需要的語句,空白塊,並在適當的情況下自動內聯短程方法 。

例如,下面是Android的一個非常基本的ProGuard配置:

-dontskipnonpubliclibraryclasses -dontobfuscate -forceprocessing -optimizationpasses 5

-keep類*寬android.app.Activity -assumenosideeffects類android.util.Log { public static * d(...); public static * v(...); }所以你可以將它保存到一個文件中,然後從Ant中調用ProGuard,傳入你剛剛編譯的JAR和你正在使用的Android平臺JAR。

@REF:Remove all debug logging calls before publishing: are there tools to do this?

相關問題