You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助ProGuard与R8移除特定包外的所有日志调用?

Android Release模式下保留指定包日志的ProGuard配置

当前配置情况

我已将Android项目配置为Release模式下移除所有日志,具体配置如下:

build.gradle(app)配置

postprocessing {
    removeUnusedCode false
    obfuscate false
    optimizeCode true
    proguardFile 'proguard-rules.pro'
}

proguard-rules.pro规则

-assumenosideeffects class android.util.Log { *; }

需求

当前配置会移除应用内所有Log.*调用,但希望保留特定包(例如com.mylibrary)内的日志,需要调整ProGuard规则。

正确配置方案

ProGuard并不支持-except-in这类语法,正确的做法是先保留目标包的Log调用,再对其余代码启用日志移除:

修改proguard-rules.pro为以下内容:

# 保留com.mylibrary包下所有类的Log相关方法调用
-keepclassmembers class com.mylibrary.** {
    public static *** d(...);
    public static *** e(...);
    public static *** i(...);
    public static *** v(...);
    public static *** w(...);
    public static *** wtf(...);
}

# 移除其他所有类的Log调用
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
    public static *** i(...);
    public static *** v(...);
    public static *** w(...);
    public static *** wtf(...);
}

说明

  • -keepclassmembers规则确保com.mylibrary包下所有类的Log方法(debug、error、info等)不会被移除;
  • -assumenosideeffects规则会移除其他所有类的Log调用,实现"仅保留指定包日志"的需求;
  • build.gradle中的postprocessing配置无需修改,保持原有设置即可。

内容的提问来源于stack exchange,提问作者Two Horses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:05:18