Proguard - 找不到任何超级课程

时间:2013-05-21 09:50:36

标签: android log4j libraries proguard

我收到了这个错误:

Unexpected error while performing partial evaluation:
Class       = [org/apache/log4j/chainsaw/Main]
Method      = [<init>()V]
Exception   = [java.lang.IllegalArgumentException] (Can't find any super classes of [org/apache/log4j/chainsaw/LoadXMLAction] (not even immediate super class [javax/swing/AbstractAction]))
Error: Can't find any super classes of [org/apache/log4j/chainsaw/LoadXMLAction] (not even immediate super class [javax/swing/AbstractAction])

我的proguard配置的一部分:

-dontwarn javax.jms.**
-dontwarn com.sun.jdmk.comm.**
-dontwarn android.support.v4.**
-dontwarn com.google.api.client.googleapis.extensions.**
-dontwarn org.apache.harmony.**
-dontwarn com.sun.**
-dontwarn org.simpleframework.**
-dontwarn com.google.android.gms.**
-dontwarn org.apache.log4j.lf5.viewer.**
-dontwarn java.beans.**
-dontwarn org.apache.log4j.**

-libraryjars 'D:\Workspace\android\libs\acra-4.5.0.jar'
-libraryjars 'D:\Workspace\android\libs\activation.jar'
-libraryjars 'D:\Workspace\android\libs\additionnal.jar'
-libraryjars 'D:\Workspace\android\libs\android-logging-log4j-1.0.3.jar'
-libraryjars 'D:\Workspace\android\libs\android-support-v4.jar'
-libraryjars 'D:\Workspace\android\libs\annotations.jar'
-libraryjars 'D:\Workspace\android\libs\google-api-client-android-1.12.0-beta.jar'
-libraryjars 'D:\Workspace\android\libs\jtar-1.1.jar'
-libraryjars 'D:\Workspace\android\libs\log4j-1.2.15.jar'
-libraryjars 'D:\Workspace\android\libs\mail.jar'
-libraryjars 'D:\Workspace\android\libs\simple-xml-2.6.9.jar'

log4j的库就在那里,那么可能是什么问题呢?

更新

我发现在优化过程中出现了问题。 收缩和混淆正在发挥作用。

2 个答案:

答案 0 :(得分:2)

对于那些需要在Android上使用Log4J的快速解决方案的人,Krivers&#39;更新实际上作为提示:在ProGuard配置中设置-dontoptimize会关闭优化,从而避免错误(尽管这只应被视为一种解决方法)。

事实上,Android工具项目网站也有suggested to turn off ProGuard optimization

  

Dalvik执行了许多自己的优化,并且ProGuard执行的一些优化与Dalvik不兼容,因此为了避免难以计算的错误(并且因为净性能增益通常很小),默认配置关闭优化。

答案 1 :(得分:1)

类org.apache.log4j.chainsaw.LoadXMLAction扩展了类javax.swing.AbstractAction。后一类是Swing的一部分,在Android中不存在。因此,LoadXMLAction永远不能在实践中使用。此外,如果没有完整的类层次结构,ProGuard无法正确分析此类。

解决方案:您应该避免将LoadXMLAction添加到应用程序库,方法是不将相应的Apache jar放在libs目录中,或者从ProGuard injars选项中过滤掉类(和类似的类)(更多标准构建过程中很难,或者从jar中删除类。