使用 ProGuard 在 Android 中删除 LibGDX 日志

Posted

技术标签:

【中文标题】使用 ProGuard 在 Android 中删除 LibGDX 日志【英文标题】:Remove LibGDX logs in Android using ProGuard 【发布时间】:2014-05-17 21:56:00 【问题描述】:

我有一个proguard.cfg 文件,其中包含多个语句,包括优化通道和日志抑制:

-assumenosideeffects class android.util.Log  *; 

-assumenosideeffects class com.badlogic.gdx.Application 
    public static void debug(...);
    public static void error(...);
    public static void log(...);

Log.* 的调用已在最终输出的 APK 文件中正确删除。但是 gdx 日志调用仍然在代码中。例如,我仍然可以在输出中看到类似的内容:

Gdx.app.debug("debug()", "^");
Gdx.app.error("error()", "^");
Gdx.app.log("log()", "^");

我还尝试将我的配置的这一部分放在proguard-optimize.txt 文件中,正如我在类似问题上看到的那样,然后在project.properties 文件中设置适当的值,如下所示:proguard.config=proguard-optimize.txt:proguard.txt它没有不行

如果我输入通用通配符,只有这些调用才会被删除:

-assumenosideeffects class com.badlogic.gdx.Application 
    *;

但我不想删除对其他 Application 静态方法的调用,例如 add*get*() 的调用。

已启用优化步骤(6 次通过)。

【问题讨论】:

我对 proguard 了解不多,但调用实际上使用 com.badlogic.gdx.backends.android.AndroidApplication 实例会不会是个问题? (Application 是一个接口。) 确实可能是这种情况,但是我不明白为什么当我使用通配符时调用会被删除。反正我会试试的。 【参考方案1】:

Gdx.app.debug is not static 是一个实例方法(appGdx 类的静态字段)。

试试:

-assumenosideeffects class com.badlogic.gdx.Application 
    public void debug(...);
    public void error(...);
    public void log(...);

【讨论】:

确实你是对的。我可能应该少写代码,多睡觉。谢谢【参考方案2】:

在您的应用程序代码中尝试这样的操作:

Gdx.app.setLogLevel(Application.LOG_NONE);

这将阻止消息被记录。

干杯!

【讨论】:

日志消息不会出现在控制台的输出中,但日志语句仍会出现在源代码中。你没有回答问题。还是谢谢。

以上是关于使用 ProGuard 在 Android 中删除 LibGDX 日志的主要内容,如果未能解决你的问题,请参考以下文章

Android Proguard,删除所有Log语句并合并包

Android Jack 编译器没有从 proguard 规则中删除日志

Android Proguard 未删除所有日志消息

如何将 proguard 配置为仅删除 android 日志记录调用

启用 proguard 的 Android 单元测试

无法从 R8 配置中删除“-ignorewarnings”(Android Proguard 问题)