我正在尝试将 proguard 配置为仅缩小我的 jar,并且仅删除包 com.faster.xml**、com.amazonaws.javax.、com.amazonaws.org.apache.、org.apache.commons. 和 org.joda. 中的字段。为此,我在 proguard 配置中使用了以下内容:
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontobfuscate
-dontoptimize
-dontpreverify
-keepattributes
-keep enum ** { *; }
-keep class !com.fasterxml.**, !com.amazonaws.javax.**,
!com.amazonaws.org.apache.**, !org.apache.commons.**, !org.joda.**,
** { *; }
但是,我注意到不在指定命名空间中的内容仍然被删除。该 jar 似乎仍在工作,但我只是想了解它到底在做什么。
最佳答案
您的配置显式保留所有类、字段和方法,指定包中的除外。那应该就是你想要的。您可以使用以下命令检查配置的效果
-printseeds seeds.txt
生成的文件包含显式保留的类、字段和方法的列表。
如果某些类似乎消失了,您应该仔细检查输入目录或输入 jar。您还可以检查配置中的 -injars
或 -outjars
选项是否具有过滤器。
关于java - proguard 删除我用 keep 指定的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193147/