在 Proguard 中保留带注释的类
Posted
技术标签:
【中文标题】在 Proguard 中保留带注释的类【英文标题】:Keep annotated class in Proguard 【发布时间】:2012-07-22 06:14:49 【问题描述】:我有一堆使用例如像这样的@Singleton 注释
@Singleton
public class ImageCache
我想保留。如何配置 proguard -keep 语句,使其适用于所有具有该注释的类。
顺便说一句,就上下文而言,我需要在 android 上使用 Roboguice 的应用程序,这就是我添加标签的原因。可能会帮助其他人。
【问题讨论】:
【参考方案1】:ProGuard 基于带有通配符的类 java 配置。它确实需要完全限定的类名。这应该有效:
-keep @com.google.inject.Singleton public class *
【讨论】:
这是一块金子。保留 jackson 1、jackson 2 和 gson 注释类非常有用。 ;) Eric,我认为 proguard 手册应该更明确地保留带注释的类、方法、字段等。 我还必须添加 keepclassmembers。但你提出了一个好主意,所以 +1 另外,如果您使用自定义注解,请确保 RetentionPolicy 为 CLASS 或 RUNTIME,否则 proguard 将无法找到它们。【参考方案2】:先定义一个注解
public @interface DoNotStrip
然后把这个放到proguard.cfg中:
-keep,allowobfuscation @interface com.something.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.something.DoNotStrip class *
-keepclassmembers class *
@com.something.DoNotStrip *;
【讨论】:
嗨,对于那些发现此答案适用于他们的案例的人,有一个预定义的注释@androidx.annotation.Keep @Inliner Keep注解是指在minify过程中,如果未访问该类,则保持该类不被删除 @Didi 谢谢,确实是这样。与proguard规则相同。不同之处在于您使用它们时可用的调整数量。在下面的文章中,描述了何时使用它们中的每一个。 medium.com/androiddevelopers/… 您还可以查看 Android Studio 预定义的 proguard 规则,了解如何创建自己的注解。以上是关于在 Proguard 中保留带注释的类的主要内容,如果未能解决你的问题,请参考以下文章
如果在proguard中包含带有注释的字段,如何保持类的成员不受影响
Proguard 导致 100 个“找不到引用的类”警告,忽略 springframework 和 jackson 的保留规则