仅模糊和优化

时间:2018-10-28 13:35:31

标签: java kotlin 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:找不到[org / apache / logging / log4j / core / jackson / Log4jXmlModule](具有1个已知的超级类)和[org / apache / logging / log4j / core的公共超类/ jackson / Log4jJsonModule](具有4个已知的超级类)

我在做什么错?

1 个答案:

答案 0 :(得分:1)

log4j库依赖于某些运行时依赖项,请参见此处的页面:

https://logging.apache.org/log4j/2.x/runtime-dependencies.html

有问题的类(Log4jXmlModule和Log4jJsonModule)从某些jackson类扩展而来,这只是一个可选的依赖项,因此可能不包含在您的项目中。

如果启用-dontshrink,则ProGuard无法删除这些类,并且在优化过程中会出现类似的错误,因为ProGuard不了解层次结构。通常,不建议执行优化,而是禁用收缩,因为某些优化技术依赖于收缩后会清理的事实。

根据您的情况,您可以将缺少的运行时依赖项作为-libraryjar输入添加到ProGuard,以避免发生此错误。