Proguard问题与jar文件,如何找到丢失的jar?

cot*_*aws 13 java android jar proguard

当我尝试用Proguard导出我的apk时,我遇到了很多错误(超过400)类似于:

Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper
Run Code Online (Sandbox Code Playgroud)

org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource
Run Code Online (Sandbox Code Playgroud)

我正在使用Jackson Json库,错误似乎与此有关.

研究这个错误我从Proguards FAQ中找到了以下内容:

如果存在对类或接口的未解析引用,则很可能忘记指定基本库.为了正确处理,必须指定代码引用的所有库,包括Java运行时库.要指定库,请使用-libraryjars选项.

在SO上搜索我发现了许多与此相关的未解答的问题,但一般意义上我使用的jar文件(在这种情况下是Jackon JSON)依赖于更多的库并且需要将它们添加到Proguard的配置文件中怎么样.

但是,我无法弄清楚如何确定需要哪些罐子以及它们在哪里.警告提到了许多不同的软件包,例如javax.ws.rs.ext,org.joda.time,org.codehaus.stax2,javax.xml.stream等.

  1. 如何确定哪些罐子包含这些包装?例如,javax.ws.rs.ext.**类需要什么jar?
  2. 我如何确定这些罐子的位置以及在Proguard中使用-libraryjars的路径?

非常感谢


编辑: 我还应该提到我正在使用Android库项目设置.这些罐子位于主库项目中,实际工作项目的构建路径包括库项目中的罐子.不知道这是否有所作为,但我想应该提一下.


更新 只是为了测试,我完全删除了远离构建路径和我的代码的jackson,现在Proguard成功完成.问题仍然存在......处理这些错误的正确方法是什么?

Eclipse中的Android导出向导是否会自动将/ lib/jars添加到proguard,还是必须在proguard配置文件中手动添加它们,如下所示:

-libraryjars C:/Project/lib/somjar.jar
Run Code Online (Sandbox Code Playgroud)

我确实尝试过杰克逊一个,但没有任何区别.这是否意味着我还必须找到警告中提到的类所需的所有罐子并添加它们?他们会在sdk或java安装中吗?

对不起,如果这些是愚蠢的问题,但我一直试图在过去几个小时弄清楚这一点,并且不知道该怎么做.

再次感谢


再次更新

所以更多的搜索,结合本杰明的建议,我发现一些缺少的类是在rt.jar,这是在jdk的lib文件夹中.所以我最后补充说

-libraryjars  <java.home>/lib/rt.jar
Run Code Online (Sandbox Code Playgroud)

到proguard.cfg文件,并将警告从485下调到204.嘿,我猜这是......剩下的警告描述了我根本找不到的类.该应用程序运行良好,没有运行proguard,所以这些类必须在某个地方吗?或者我应该使用这些警告-dontwarn

剩下的类在这些包中:

org.joda.time.
org.codehaus.stax2.
javax.ws.rs.
Run Code Online (Sandbox Code Playgroud)

所以现在我只需要一种方法来弄清楚:

  1. 什么罐子有这些类
  2. 这些罐子在哪里,所以我可以将它们包含在proguard配置文件中

Nic*_*ckT 5

我和Proguard有类似的问题和我使用osmdroid.jar的类似错误,它构建了OK unobfuscated.这个jar必须具有我的应用程序不需要的外部依赖项.幸运的是,作者列出了所需的罐子,一旦我下载并通过-libraryjars选项告诉Proguard,Proguard构建就可以了.

你丢失的罐子(你可能不需要,但Proguard认为你可能!),你应该找到它们:

org.joda.time (拉链内的罐子)

org.codehaus.stax2.

javax.ws.rs.