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 构建时,您的应用程序无法启用调试。确保在您的清单中,
<application>
元素设置为 android:debuggable="false"
【讨论】:
感谢您的帮助。在我的 Library 项目和 Application 项目中都没有任何android:debuggable="false"
,但 Proguard 在应用 @Eric Lafortune 的建议后工作。以上是关于proguard.cfg 在使用 LIBRARY 的导出应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”