Java 如何阻止Proguard shrink删除注释参数,即使它保留注释本身?
我只使用Proguard(版本5.2.1)进行收缩,而不是混淆或优化。这是我的配置: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
-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 * {*;}