gpt4 book ai didi

java - Proguard keepclassmembers 保持类

转载 作者:行者123 更新时间:2023-12-04 05:53:54 26 4
gpt4 key购买 nike

抱歉,如果我错过了涵盖此内容的回复,但我已努力努力寻找类似的内容。

我真的对 Proguard 的行为感到困惑,我想知道我是否在阅读文档错误或者行为是否错误。

如果保留了该类,我想保留一个类中的注释字段和成员。所以我用了keepclassmembers像这样:

-keepclassmembers class com.mycompany.** {
@com.mycompany.**
public com.mycompany.** *;
@com.mycompany.**
public void *(com.mycompany.**);
}

(这个配置是由 GUI 构建的,但我想我明白它在做什么。) Proguard 文档说

-keepclassmembers [,modifier,...] class_specification

Specifies class members to be preserved, if their classes are preserved as well. For example, you may want to keep all serialization fields and methods of classes that implement the Serializable interface.



听起来不错。但是我在输出中得到了我不期望的类,只是因为它们有@annotated 监听器。 -whyareyoukeeping class com.company.MyServiceImpl ?
com.mycompany.MyServiceImpl
is invoked by com.mycompany.MyServiceImpl: void handleEvent(com.mycompany.MyEvent) (34:35)
is kept by a directive in the configuration.
handleEvent只是调用 MyServiceImpl 中的另一个方法, 所以这似乎不是保留全类的正当理由 ,但这是我能想到的唯一想法。

为什么 keepclassmembers似乎强制 keep在包含指定成员的任何类上,不仅“如果它们的类也被保留”?但更直接的是, 如何将公共(public)注释事件监听器保留在 Proguard 已经通过其他规则保留的类中?

最佳答案

您的初始配置和对它的解释看起来是正确的。如果我在一个简单的例子上尝试它也可以:如果已经保留了带注释的字段和方法,则保留它们的类。当然,那些带注释的方法可能包含拖入更多类的代码。

-whyareyoukeeping 的输出只说明了一半,在这种情况下并不是很有帮助。您可以检查 -printseeds 是否提供了一些提示。

带有“允许”修饰符的可行配置似乎没有多大意义;我不会太相信它。

如果您仍然认为存在错误,可以在 ProGuard bug tracker 中报告。 ,最好有一个可以让我重现问题的例子。

关于java - Proguard keepclassmembers 保持类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com