4

我有两个版本的同一应用程序,使用与proguard.cfg以下部分相同的部分,旨在压制所有 Log.x() LogCat 输出:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

第一个版本是单片的(即不引用任何库项目)并且proguard.cfg完全按预期工作。

第二个版本使用两个库项目(一个是我的,另一个是 Google 的 LVL)。proguard.cfg应用程序项目和我的库项目中都放置了相同的内容。但是,在那第二个版本中,proguard.cfg似乎根本就没有效果!

有什么可以解释的?

4

3 回答 3

2

您确实添加proguard.config=proguard.cfgbuild.properties您的应用程序项目中吗?您应该会看到 ProGuard 的控制台消息和输出文件。优化过程至少应该提到一些“删除指令的数量”。

应用程序类和库类都编译为 bin/classes。然后它们被完全相同地对待:它们被组合成 bin/original.jar 并使用 proguard.cfg 混淆为 bin/obfuscated.jar。添加更多类并不能真正对删除日志记录代码产生影响。

于 2011-06-26T23:27:26.847 回答
1

请使用此开关进行诊断: -whyareyoukeeping

于 2011-06-26T05:34:13.110 回答
0

为了禁用登录我的应用程序,我使用了这个:

-assumenosideeffects public class android.util.Log {
    <methods>;
}

如果这不能解决您的问题,那么还有其他一些方法可以尝试:

  1. 在代码 proguard 的一部分抛出异常应该是混淆的。如果堆栈跟踪没有被混淆,那么 proguard 可能无法正常运行。
  2. 当您进行 proguard 构建时,您的应用程序无法启用调试。确保在您的清单中,该<application>元素设置为android:debuggable="false"
于 2011-06-29T17:55:54.040 回答