[英]proguard hell - can't find referenced class
所以,我想发布一些软件,但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 也忽略它吗??
有任何想法吗?
代码中的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
您应该将其包含在您的 Proguard 配置中:
-dontskipnonpubliclibraryclasses
我认为这是一个边缘情况,但在我的情况下,我必须完全擦除我的 Jenkins proguard 上的构建文件夹,尝试使用不再存在的旧代码 - 以防万一有人遇到同样的问题。
在我的情况下,我没有改变任何东西,警告开始显示。 问题在于损坏的 gradle 缓存。 检查我的另一个答案。 我与此分享,因为我花了 2 个小时才找到问题:]
将此行添加到 gradle 脚本目录中的proguard-rules.pro
文件中:
-dontwarn package.class.name.**
其中package.class.name
是附加了 jar 文件的类名的包名。
例如:
-dontwarn com.myexternalclass.utils.**
唔。 阅读该警告似乎您尝试使用的库依赖于 javax.xml.stream.events。 我认为命名空间实际上根本没有包含在 android 中。 (见包裹索引)。
尝试在不使用 proguard 的情况下将其部署到模拟器,看看它是否有效。 如果那个警告是准确的,我的猜测是不会的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.