我想用自定义的@Keep
注解来注解我的应用程序中的一些接口(interface),并配置ProGuard以便
- 不混淆带注释的接口(interface)及其方法,
- 在实现类时不混淆那些接口(interface)方法的实现。
我试过类似的东西
# Kept interfaces and all their methods
-keep interface @com.foo.bar.annotation.Keep * {
<methods>;
}
# Classes implementing kept interfaces
-keep class * implements @com.foo.bar.annotation.Keep *
但显然语法是无效的。我尝试了其他方法,但 ProGuard 文档及其示例并不清楚确切的语法以及在什么情况下可能发生的情况。
最佳答案
很抱歉回答我自己的问题,但我只是在玩耍时碰巧遇到了解决方案。其实比我想象的要简单得多:
# Annotated interfaces (including methods which are also kept in implementing classes)
-keep @com.foo.bar.annotation.Keep interface * {
*;
}
显然指定<methods>
是错误的在接口(interface) keep 子句上,可能是因为 ProGuard 只过滤实际的方法实现,而不仅仅是接口(interface)声明中可以找到的方法声明。
上面的语法似乎保留了完整的接口(interface)(类名、方法名)加上所有实现方法名,如果我考虑一下,这是合乎逻辑的,因为如果我实现了一个接口(interface),我就不能改变(混淆)方法名无论如何。
关于java - ProGuard:保留用@Keep 注释的接口(interface)的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22474109/