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