我們在Android開發(fā)的過程中,經常會使用Log來打印日志败富,方便觀察結果輸出,但是當我們打包應用摩窃,需要發(fā)布到應用市場時兽叮,顯然是不能輸出這些信息的∨忌郑肯定不能采取批量刪除或注釋這種暴力的方法充择,下面我主要介紹三種方法來實現。
方法一:條件判斷
可以在Log輸出前加上條件進行判斷匪蟀,如果沒幾條log輸出可以采用這種方式椎麦。
if(BuildConfig.DEBUG)
Log.i(TAG, "Debugging");
方法二:封裝Log類
可以自己封裝一個Log類,可以實現條件判斷材彪,也可以設置輸出的log級別观挎。
public class Logger {
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混淆配置
使用gradle 進行打包琴儿,添加混淆配置可以將log輸出給刪去,實現方式如下
1.build.gradle:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
signingConfig signingConfigs.SginConfig
}
}
2.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(...);
}
注:該方法必須確保優(yōu)化未被禁用嘁捷,所以在build.gradle
里需要用proguard-android-optimize.txt
替換proguard-android.txt
,而且在proguard-rules.pro
文件里不能使用-dontoptimize
參數
3.混淆說明
首先我們先看一下proguard的作用造成,ProGuard的讀取輸入的代碼和壓縮,優(yōu)化雄嚣,混淆晒屎。
如果你只是需要壓縮資源和禁用日志記錄(優(yōu)化步驟的一部分),您可以通過配置
proguard-android-optimize.txt
跳過混淆一步缓升。 你可以在文件里配置-optimizations optimization_filter
參數鼓鲁,參考官方說明