仅混淆和优化
Only Obfuscate & Optimize
我一直在弄乱 Proguard 配置,发现我想测试只是为了优化和混淆而不是收缩只是为了减少我的 jar 一点。这是我的配置:
# Include java runtime classes
-libraryjars <java.home>/lib/rt.jar
-dontshrink
-dontusemixedcaseclassnames
-dontpreverify
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-dontwarn
-keep class **
-keep interface **
-keep enum **
但我仍然会收到如下错误:
java.lang.IllegalArgumentException: Can't find common super class of [org/apache/logging/log4j/core/jackson/Log4jXmlModule] (with 1 known super classes) and [org/apache/logging/log4j/core/jackson/Log4jJsonModule] (with 4 known super classes)
我做错了什么?
log4j 库依赖于一些运行时依赖项,请参阅此处的页面:
https://logging.apache.org/log4j/2.x/runtime-dependencies.html
有问题的 classes(Log4jXmlModule 和 Log4jJsonModule)从一些 jackson class 扩展而来,它只是一个可选的依赖项,因此可能不包含在您的项目中。
如果您启用 -dontshrink
,ProGuard 无法删除这些 classes 并且在优化期间您会收到类似这样的错误,因为 ProGuard 不知道层次结构。通常不建议执行优化但禁用收缩,因为一些优化技术依赖于收缩之后清理的事实。
在您的情况下,您可以将缺少的运行时依赖项作为 -libraryjar
输入添加到 ProGuard 以避免此错误。
我一直在弄乱 Proguard 配置,发现我想测试只是为了优化和混淆而不是收缩只是为了减少我的 jar 一点。这是我的配置:
# Include java runtime classes
-libraryjars <java.home>/lib/rt.jar
-dontshrink
-dontusemixedcaseclassnames
-dontpreverify
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-dontwarn
-keep class **
-keep interface **
-keep enum **
但我仍然会收到如下错误:
java.lang.IllegalArgumentException: Can't find common super class of [org/apache/logging/log4j/core/jackson/Log4jXmlModule] (with 1 known super classes) and [org/apache/logging/log4j/core/jackson/Log4jJsonModule] (with 4 known super classes)
我做错了什么?
log4j 库依赖于一些运行时依赖项,请参阅此处的页面:
https://logging.apache.org/log4j/2.x/runtime-dependencies.html
有问题的 classes(Log4jXmlModule 和 Log4jJsonModule)从一些 jackson class 扩展而来,它只是一个可选的依赖项,因此可能不包含在您的项目中。
如果您启用 -dontshrink
,ProGuard 无法删除这些 classes 并且在优化期间您会收到类似这样的错误,因为 ProGuard 不知道层次结构。通常不建议执行优化但禁用收缩,因为一些优化技术依赖于收缩之后清理的事实。
在您的情况下,您可以将缺少的运行时依赖项作为 -libraryjar
输入添加到 ProGuard 以避免此错误。