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

Posted

技术标签:

【中文标题】proguard.cfg 在使用 LIBRARY 的导出应用程序中不起作用【英文标题】:proguard.cfg not working in exported application using LIBRARY 【发布时间】:2011-09-19 02:39:06 【问题描述】:

我有两个版本的同一个应用程序使用相同的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 似乎根本没有任何作用!

这有什么可以解释的?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

+1,因为您提示我比较库项目和应用程序项目之间的default.properties。果然,这行在Library项目中存在,但在应用程序项目中不存在!从单体项目转移到基于库的项目的过程中还有另一个陷阱……我将很快测试更改并接受是否是罪魁祸首。 刚刚测试了您的建议(也将proguard.config=proguard.cfg 添加到应用程序的 项目中)并且...它有效! :)【参考方案2】:

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

【讨论】:

+1 用于突出显示此开关(不在我的 proguard.cfg 中)【参考方案3】:

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

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

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

    在代码保护的一部分引发异常应该是混淆的。如果堆栈跟踪未被混淆,则 proguard 可能无法正常运行。 当您进行 proguard 构建时,您的应用程序无法启用调试。确保在您的清单中,&lt;application&gt; 元素设置为 android:debuggable="false"

【讨论】:

感谢您的帮助。在我的 Library 项目和 Application 项目中都没有任何 android:debuggable="false",但 Proguard 在应用 @Eric Lafortune 的建议后工作。

以上是关于proguard.cfg 在使用 LIBRARY 的导出应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”

proguard.cfg 文件丢失

Proguard.cfg 丢失

android中的proguard.cfg与proguard.rules.pro区别

android里proguard.cfg文件有啥用?

proguard生成的pro怎么载入