所以,我尝试发布一些软件,但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忽略它吗?
有什么想法吗?
答案 0 :(得分:125)
org.simpleframework.xml.stream.StreamReader
引用javax.xml.stream.events.XMLEvent
。后一类是Java运行时(rt.jar
)的一部分,但不是Android运行时(android.jar
)的一部分,因此ProGuard会警告某些内容可能会被破坏。如果您确定您的应用程序仍然有效,则可以指定
-dontwarn javax.xml.stream.events.**
ProGuard地狱?
答案 1 :(得分:8)
答案 2 :(得分:5)
发生此错误是因为您使用的库依赖于其他未真正使用的库,但Proguard正在寻找它们。
将 -dontwarn 行添加到Android项目中的 proguard-rules.pro 文件中以禁用此警告。
您可以在错误的堆栈跟踪中找到需要添加到proguard-rules.pro中的依赖项。
答案 3 :(得分:2)
您应该在Proguard配置中包含这个:
-dontskipnonpubliclibraryclasses
答案 4 :(得分:2)
My Magic键解决了我的搜索时间:将其添加到proguard-android.txt
-dontskipnonpubliclibraryclassmembers
答案 5 :(得分:0)
嗯。阅读该警告,您尝试使用的库似乎依赖于javax.xml.stream.events。我认为该命名空间实际上并不包含在android中。 (见Package Index)。
尝试在不使用proguard的情况下将其部署到模拟器,看看它是否有效。如果这个警告是准确的,那我的猜测就不是。
答案 6 :(得分:0)
我认为这是一个边缘案例,但在我的情况下,我必须彻底擦除我的Jenkins proguard上的构建文件夹,试图使用旧代码,而不再存在 - 只是以防任何人有同样的问题。
答案 7 :(得分:0)
在我的情况下,我没有改变任何事情,警告开始显示。问题出在gradle缓存中。检查我的其他answer。我与此分享,因为我花了2个小时才发现问题:]
答案 8 :(得分:0)
将此行添加到gradle脚本目录中的proguard-rules.pro
文件中:
-dontwarn package.class.name.**
其中package.class.name
是程序包名称,后面是jar文件的类名。
例如:
-dontwarn com.myexternalclass.utils.**