proguard.cfg使用LIBRARY在导出的应用程序中不起作用

时间:2011-06-20 23:33:06

标签: android proguard android-library android-lvl library-project

我有两个版本的同一个应用程序使用相同的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完全符合预期。

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

有什么可以解释这个?

3 个答案:

答案 0 :(得分:2)

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

应用程序类和库类都编译为bin / classes。然后对它们进行完全相同的处理:使用proguard.cfg将它们组合成bin / original.jar并混淆到bin / obfuscated.jar。添加更多类不会对删除日志记录代码产生影响。

答案 1 :(得分:1)

请使用此开关诊断: -whyareyoukeeping

答案 2 :(得分:0)

要在我的应用中禁用日志记录,我使用了这个:

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

如果这不能解决您的问题,那么还有其他一些事情要尝试:

  1. 在代码proguard的一部分上抛出异常应该是混淆的。如果堆栈跟踪未被混淆,则proguard可能无法正常运行。
  2. 执行proguard构建时,您的应用无法启用调试功能。请确保在您的清单中,<application>元素设置为android:debuggable="false"