Android proguard hell-can';找不到引用的类

Android proguard hell-can';找不到引用的类,android,proguard,Android,Proguard,所以,我试图发布一些软件,但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:

所以,我试图发布一些软件,但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也忽略它吗


有什么想法吗?

嗯。阅读该警告,您试图使用的库似乎依赖于javax.xml.stream.events。我不认为名称空间实际上包含在android中。(见附件)


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

您应该在Proguard配置中包含以下内容:

-dontskipnonpubliclibraryclasses

代码中的org.simpleframework.xml.stream.StreamReader指的是
javax.xml.stream.events.XMLEvent
。后一个类是Java运行时(
rt.jar
)的一部分,但不是Android运行时(
Android.jar
)的一部分,因此ProGuard警告可能有东西坏了。如果您确定应用程序仍能正常工作,则可以指定

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

ProGuard地狱?

解决我搜索时间问题的魔法钥匙:将此添加到progruard-android.txt

-dontskipnonpubliclibraryclassmembers

就我而言,根本原因是。您可以跳过以下警告:

-dontwarn org.simpleframework.xml.stream.**

我认为这是一个边缘案例,但在我的案例中,我不得不完全删除Jenkins proguard上的构建文件夹,尝试使用不再存在的旧代码-以防任何人有相同的问题。

在我的案例中,我没有更改任何内容,警告开始显示。问题是gradle的缓存损坏了。检查我的另一个。我同意这一点,因为我花了2个小时才找到问题:

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


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

将此行添加到gradle scripts目录下的
proguard rules.pro文件中:

-dontwarn package.class.name.**
其中,
package.class.name
是附加了jar文件类名的包名

例如:

-dontwarn com.myexternalclass.utils.**

你使用proguard只是为了爬树吗?如果是这样的话,您是否在不使用它的情况下检查了文件大小?当proguard抛出使用反射访问的东西时,您可能会遇到superwierd bug,例如,在它中断运行时之前,您将无法找到这些东西,所以请确保您确实需要它。我真的只是想用它来尽量保护代码不被破坏?你认为它值得吗?@ListenToRick Proguard很好,如果它使用正确的配置运行,并且你的应用程序测试正确的话。我很确定谷歌甚至推荐使用它。谷歌提供了大量的指南/示例,说明如何在Android应用程序中使用Proguard。Proguard是一个很好的工具,但谷歌推荐它的数量可能至少与其他任何工具一样多,因为dex格式的大小限制相当严格。(看)@alun,这不是原因。我们中那些不希望我们的应用程序被反向工程的人,或者那些正在使用授权来“尝试”防止盗版的人,应该使用这样一种模糊处理工具,让潜在的黑客更难使用。使您的应用程序占用更少的空间对最终用户也是一个好处,而且这些工具也进行了优化。。。还有一个好处。这并没有为我解决这个问题,但是这确实解决了
-dontwarn javax.xml.*
添加
-libraryjars/lib/rt.jar
为我解决了这个问题。我收到了关于例如javax.xml.stream.XMLInputFactory的额外警告,因此,我使用了
-dontwarn javax.xml.stream.*
如何设置
-dontwarn
使用GUI?这很奇怪,我在2018年仍然遇到了这个问题,我不确定我错过了什么,但这个解决方案在2018年仍然适用,没有一些缺点吗,当时对我来说是这样的……~4年前……从那时起事情可能已经改变了:)似乎至少对另外两个人起了作用。默认情况下已经有了这一行。@Ultimecia的commit是从2013年开始的,这篇文章是在2011年发表的Hi,如果它在emulator中工作而没有proguard,这意味着警告不准确?我正试图弄明白为什么我会收到类似的警告。我不想只是抑制警告。