proguard.cfg 无法在使用 LIBRARY 的导出应用程序中工作

发布于 2024-11-16 20:44:47 字数 521 浏览 5 评论 0原文

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

什么可以解释这一点?

I have two versions of the same application using identical proguard.cfg with the following section aimed at squelching all Log.x() LogCat output:

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

The first version is monolithic (i.e. not referencing any Library projects whatsoever) and proguard.cfg works there exactly as expected.

The second version is using two Library projects (one is mine and the other is Google's LVL). The same proguard.cfg is placed in both the application project and my Library project. However, in that second version, proguard.cfg seems to simply have no effect!

What could possibly explain this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

莫言歌 2024-11-23 20:44:47

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

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

You did add proguard.config=proguard.cfg to build.properties in your application project? You should see ProGuard's console messages and output files. The optimization pass should at least mention some "Number of removed instructions".

The application classes and the library classes are all compiled to bin/classes. They are then treated exactly the same: they are combined into bin/original.jar and obfuscated to bin/obfuscated.jar, using proguard.cfg. Adding more classes can't really have an effect on removing the logging code.

愚人国度 2024-11-23 20:44:47

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

Please use this switch to diagnose:
-whyareyoukeeping

佼人 2024-11-23 20:44:47

要禁用我的应用程序中的日志记录,我使用了以下方法:

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

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

  1. 在代码混淆器的一部分引发异常应该是混淆的。如果堆栈跟踪没有被混淆,那么 proguard 可能无法正常运行。
  2. 当您进行混淆构建时,您的应用程序无法启用调试。确保在清单中, 元素设置为 android:debuggable="false"

To disable logging in my app, I used this:

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

If that doesn't solve your problem then there are a couple other things to try:

  1. Throw an exception at a part of the code proguard should be obfuscating. If the stacktrace is not obfuscated, then proguard might not be running properly.
  2. Your app cannot have debug enabled when you do a proguard build. Be sure that in your manifest, the <application> element is set to android:debuggable="false"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文