Java 如何阻止Proguard shrink删除注释参数,即使它保留注释本身?

Java 如何阻止Proguard shrink删除注释参数,即使它保留注释本身?,java,parameters,annotations,proguard,shrink,Java,Parameters,Annotations,Proguard,Shrink,我只使用Proguard(版本5.2.1)进行收缩,而不是混淆或优化。这是我的配置: -forceprocessing -dontobfuscate -dontoptimize -dontwarn -dontnote -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -libraryjars <java.home>/lib -keep class ** extends **.MyReque

我只使用Proguard(版本5.2.1)进行收缩,而不是混淆或优化。这是我的配置:

-forceprocessing
-dontobfuscate
-dontoptimize
-dontwarn
-dontnote
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers

-libraryjars <java.home>/lib

-keep class ** extends **.MyRequestHandler
-keep @org.springframework.stereotype.Component class **
-keep @org.aspectj.lang.annotation.Aspect class **
-keep @interface *
当我通过Proguard为我的应用程序提供数据,然后反编译生成的类文件时,它是这样的:

@Aspect
public class MyAspect {

    @Pointcut("execution(* com.amazonaws.services.dynamodb*.*AmazonDynamoDB.*(..))") 
    public void myPointCut() {
    }

    @Around
    public Object logExecution(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println(joinPoint);
        return joinPoint.proceed();
    }

}
请注意,
@Around
注释中的“value”参数丢失了!这是非常奇怪的行为。。。我几乎认为这是Proguard中的一个bug。它保留注释本身,而不是参数。。。尽管有点奇怪,但它将参数保留在
@Pointcut
注释中。有人知道如何解决这个问题吗

提醒一下,我只是在缩小,而
-keepattributes
配置只用于模糊处理,所以请不要回答
-keepattributes*注释*
将修复它。我试过了,但没有效果

我发现了这个类似的问题(),这就是我得到
-keep@interface*
配置的地方。这个设置应该保留所有的注释,它似乎正在这样做,但由于某些原因,它并没有保留所有的参数。我尝试了许多不同的方法,例如:

  • -keep@interface**
  • -keep@interface**
  • -keep@interface.On*
  • -保留@interface.*
  • -keepclassmembers类**{@org.aspectj.lang.annotation.Around;}
  • -keepclassmembers类**{@org.aspectj.lang.annotation.Around.On;}
  • -keepclassmembers类**{@org.aspectj.lang.annotation.Around.*;}

  • 这些方法中的一些只会导致Proguard抛出错误,而那些没有抛出错误的方法没有任何效果。请帮忙

    答案已发布在此ProGuard bug报告中:

    您只需更改此配置值:

    -keep @interface *
    
    为此:

    -keep @interface * {*;}
    

    这看起来仍然像是ProGuard中的一个bug,因为我显然在使用这些注释参数,我告诉ProGuard保留类和注释,所以它不应该删除它们。。。但这是解决方法。

    我与ProGuard一起打开了一个错误报告,用于:
    -keep @interface * {*;}