Release构建下Android应用日志失效问题求助(关联第三方依赖)
Android Release版本日志丢失问题解决办法
问题根因
你引入的amazonpay和simpl SDK自带的ProGuard规则,和默认的proguard-android-optimize.txt优化规则叠加,导致android.util.Log的调用被优化移除或者混淆,所以Release包下日志既无法输出到控制台,也不能写入文件。
具体修改方案
1. 修改ProGuard规则(优先推荐)
在项目的proguard-project.txt里添加以下规则,确保Log相关代码不会被处理掉:
# 保留android.util.Log的所有静态方法,防止被优化删除 -keepclassmembers class android.util.Log { public static *** d(...); public static *** e(...); public static *** i(...); public static *** v(...); public static *** w(...); public static *** wtf(...); } # 明确告知ProGuard:Log方法是有实际输出作用的,不能随意移除 -assumenosideeffects class android.util.Log { public static *** d(...); public static *** e(...); public static *** i(...); public static *** v(...); public static *** w(...); public static *** wtf(...); }
说明:默认的
proguard-android-optimize.txt中可能存在“Log方法无副作用可移除”的规则,上述配置会直接覆盖该逻辑,强制保留所有Log调用。
2. 若有自定义日志工具类
如果你自己封装了日志工具类(比如com.xxx.utils.MyLogger),也要添加规则保留它的方法:
# 保留自定义日志工具类的所有公开静态方法 -keep class com.xxx.utils.MyLogger { public static *** d(...); public static *** e(...); // 根据你工具类的实际方法补充其他日志级别 }
3. 换用温和的ProGuard优化文件(备选方案)
如果上述规则无效,可以将默认的优化文件从proguard-android-optimize.txt替换为proguard-android.txt——这个文件的优化策略更保守,默认不会删除Log调用。修改build.gradle的Release配置:
buildTypes { release { minifyEnabled true ndk.debugSymbolLevel = 'FULL' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } }
4. 排查SDK自带的ProGuard规则
部分SDK会在aar包中嵌入自己的ProGuard规则,你可以解压SDK的aar文件,查看里面的proguard.txt或consumer-rules.pro文件。如果发现其中存在删除Log的配置,就在自己的proguard-project.txt中添加以下规则覆盖:
# 禁止对android.util.Log类进行优化 -dontoptimize class android.util.Log
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

