守护者地狱-找不到引用的类


125

所以,我TRYING释放一些软件,但Proguard的是让我头疼。

当我尝试使用proguard导出时,收到很多警告,即“找不到引用的类”

例如:

[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME]          You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[ 

这些警告似乎与simpleframework有关,因此在我的proguard配置文件中添加了以下内容:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

pathtoprojecttolibs我的项目引用的jar的路径在哪里。

这没有区别。

如果simpleframework引用javax,我也可以告诉proguard也忽略它吗?

有任何想法吗?


1
您是否仅在使用proguard进行树状握手?如果是这样,您是否在不使用文件的情况下检查了文件大小?例如,当proguard抛出使用反射进行访问的某些内容时,您可能会遇到一些超级错误,这些问题在中断运行时之前是不会发现的,因此,请确保您确实需要它。
阿伦2011年

我真的只是用它来尝试保护被轻易切割的代码吗?您认为值得吗?
iasksillyquestions,2011年

3
如果@ListenToRick Proguard使用正确的配置运行,并且您的结果应用程序经过了正确的测试,则可以很好地实现。我很确定Google甚至建议使用它。Google提供了许多将Proguard与Android应用程序结合使用的指南/示例。
CrackerJack9 2011年

Proguard是一个很好的工具,但是Google推荐它至少可以和其他任何东西一样,因为dex格式的大小限制相当大。(见code.google.com/p/android/issues/detail?id=7147
ALUN

5
@alun,那不是原因。我们中那些不希望我们的应用程序进行反向工程,或者正在使用许可“尝试”防止盗版的人,应该使用这样的混淆工具,使黑客更难。使您的应用程序占用更少的空间对于最终用户来说也是一个好处,并且这些工具也进行了优化……这是另一个好处。
Christopher Perry

Answers:


128

org.simpleframework.xml.stream.StreamReader在您的代码中指javax.xml.stream.events.XMLEvent。后一类是Java运行时(rt.jar)的一部分,而不是Android运行时(android.jar)的一部分,因此ProGuard警告可能会损坏某些东西。如果您确定自己的应用程序仍然可以运行,则可以指定

-dontwarn javax.xml.stream.events.**

ProGuard地狱?


15
那并不能解决我的问题,但是确实可以解决-dontwarn javax.xml.**
Jeshurun,2012年

8
添加-libraryjars <java.home>/lib/rt.jar为我解决了这个问题。
Gautam

3
我收到有关javax.xml.stream.XMLInputFactory的其他警告,所以我使用了-dontwarn javax.xml.stream.**
spacealist 2014年

1
如何设置-dontwarnGUI?
托马什Zato -恢复莫妮卡

2
Proguard的地狱仍在继续,只要让我受苦就可以解决这个痛苦。
2015年


5

发生此错误是因为您使用的库依赖于其他未真正使用的库,但Proguard正在寻找它们。
-dontwarn行添加到Android项目中的proguard-rules.pro文件中以禁用此警告。

在此处输入图片说明

您可以在错误的堆栈跟踪中找到需要添加到proguard-rules.pro的依赖项。




0

嗯 阅读该警告,似乎您要使用的库似乎依赖于javax.xml.stream.events。我认为android根本不包含名称空间。(请参阅包索引)。

尝试在不使用proguard的情况下将其部署到仿真器,然后查看其是否有效。如果该警告是准确的,我的猜测是不会的。


嗨,如果它在没有proguard的情况下在仿真器中运行,这意味着警告不正确吗?我试图弄清楚为什么我会有类似的警告。我不想只是抑制警告。
米歇尔·谢

0

我认为这是一个极端的情况,但是在我的情况下,我不得不完全擦除Jenkins proguard上的build文件夹,以尝试使用不再存在的旧代码-以防万一有人遇到相同的问题。


0

就我而言,我什么都没改变,警告开始显示。问题出在gradle缓存损坏。检查我的其他答案。我同意这一点,因为花了2个小时才发现问题:]


0

将此行添加到proguard-rules.progradle脚本目录中的文件中:

-dontwarn package.class.name.**

其中package.class.name是具有所附的jar文件的类名称的包名。

例如:

-dontwarn com.myexternalclass.utils.**
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.