ProGuard 无法删除 Log.i 函数调用

ProGuard can't remove the Log.i function calls

我在我的 android 程序中经常使用 Log.i,我想在发布版本中将它们全部删除。

我做的是这样的:

  1. 添加proguard-rules.pro:

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

您可以看到 minifyEnabled 设置为 true 并且我看到 .apk 文件的大小从 1.9M 减少到 1.2M。

  1. 添加'proguard-rules.pro'

我添加了 'proguard-rules.pro' 作为:

-assumenosideeffects class android.util.Log {
        public static int v(...);
        public static int i(...);
    }
-dontwarn okio.**

我确定它被使用了,因为之前有很多警告 okio* 警告然后我添加后警告消失了 -dontwarn.

为了确保日志消失,我 运行 设备上的应用程序连接到带有 Android Studio 运行ning 的 PC。不是调试模式,我只是用它的Android监控->logcat看看有没有日志输出。

奇怪的是我仍然看到我的应用程序的日志输出。喜欢

10-14 18:53:01.436 3173-3173/? I/b: send: 03 ed 00 02 55 

这是我的

代码的结果
Log.i(TAG, "send: "+ toHex(req));

从日志的 ? 来看,我假设 ProGuard 有效(否则它应该是我的完整应用程序名称)。但为什么我仍然看到 logcat 日志? 我错过了哪一步?

您需要使用优化的混淆器配置,让混淆器优化您的代码。

 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

使用proguard-android-optimize.txt代替proguard-android.txt