java - ProGuard:保留用@Keep 注释的接口(interface)的实现

标签 java interface annotations proguard

我想用自定义的@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/

相关文章:

java - hashmap 的第 n 项

java - 多线程私有(private)构造函数

java - 将 JFrame.getText() 从一个类成员传递给另一个类成员?

java - Spring Boot 自定义错误 Controller 返回空 JSON 响应

java - 如何使用 Hibernate Spring 检查表中已存在的值

java - 保存数组的接口(interface),由不同的类使用

python - 如何在Python中使用libcloud库

java - 在hibernate中使用注解实现静态连接

java - Spring Controller 中是否可以有handleRequest函数以及参数注释?

java - 防止java处理路径通配符