[Android黑科技]發布應用時控制log日志輸出

在Android開發的過程中,我們使用android.util.Log來打印日志,以便觀察調試信息和輸出結果。但是當我們將應用發布的時候,并不希望再顯示這些信息,一方面影響用戶的機器性能,另一方面也會暴露我們應用的一些關鍵信息,對應用的安全造成威脅。所以,在正式發布應用的時候,我們會移除或者隱藏這些Log信息,以下介紹幾種方法。

方法一:在打印Log的時候進行條件判斷

if(BuildConfig.DEBUG)
  Log.i(TAG, "Debugging");

如果應用中log比較少,可以選擇這種方法,簡單快捷有效。

方法二:自己封裝一個Log工具類,在類中設置日志顯示級別

public class LogUtils {
     public static int LOG_LEVEL = 0;
     public static int ERROR = 1;
     public static int WARN = 2;
     public static int INFO = 3;
     public static int DEBUG = 4;
     public static int VERBOS = 5;

     public static void e(String tag,String msg){
      if(LOG_LEVEL>ERROR)
      Log.e(tag, msg);
     }
     public static void w(String tag,String msg){
      if(LOG_LEVEL>WARN)
      Log.w(tag, msg);
     }
     public static void i(String tag,String msg){
      if(LOG_LEVEL>INFO)
      Log.i(tag, msg);
     }
     public static void d(String tag,String msg){
      if(LOG_LEVEL>DEBUG)
      Log.d(tag, msg);
     }
     public static void v(String tag,String msg){
      if(LOG_LEVEL>VERBOS)
      Log.v(tag, msg);
     }
}

這個方法也是目前比較流行的做法,自己可以隨意設置需要把什么級別的日志信息顯示出來。

方法三:黑科技,通過Proguard混淆移除Log信息

首先,將build.gradle中的minifyEnabled設置為true,開啟混淆。

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
        signingConfig signingConfigs.SginConfig
    }
}

其次,在proguard-rules.pro文件中添加以下代碼

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);

可以根據需要在發布應用時候顯示的級別來決定移除哪些級別的Log(將需要移除的Log級別放在以上配置里面),同時proguard的配置中還要注意不要有-dontoptimize這個配置。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,868評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,025評論 25 708
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,937評論 6 342
  • ——紀念結婚一周年 不記得寫過所謂情書,即使也曾產生懵懂的感情。也不記得說過的所謂情話,即使也曾有過心動的感覺...
    北極淚閱讀 262評論 0 0
  • 漢文帝時有個丞相,叫申屠嘉,今天我要跟你們說的是他的故事。 這家伙年輕時沒讀過什么書,劉邦出道了一段時間后,才以一...
    鵬雪飛白閱讀 853評論 0 1