Проблемы Proguard с файлами jar, как найти отсутствующий файл jar?

Когда я пытаюсь экспортировать свой apk с помощью Proguard, я получаю много ошибок (более 400), похожих на:

Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper

и

org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource

] Я использую библиотеку Jackson Json , и ошибки, похоже, связаны с этим.

Исследуя эту ошибку, я обнаружил следующее из FAQ по Proguards :

Если есть неразрешенные ссылки на классы или интерфейсы, вы, скорее всего, забыли указать важную библиотеку. Для правильной обработки необходимо указать все библиотеки, на которые ссылается ваш код, включая библиотеку времени выполнения Java. Для указания библиотек используйте параметр -libraryjars.

Обыскивая SO, я обнаружил много связанных с этим вопросов без ответов, но, по общему мнению, файл jar, который я использую (в данном случае Jackon JSON), зависит от большего количества библиотек, и их нужно добавить в Proguard. config файл каким-то образом.

Однако я не могу понять, как определить, какие банки нужны и где они находятся. В предупреждениях упоминается множество различных пакетов, таких как javax.ws.rs.ext, org.joda.time, org.codehaus.stax2, javax.xml.stream и т. Д.

  1. Как определить, какие jar-файлы содержат эти пакеты ? Например, какая банка требуется для javax.ws.rs.ext.** классы?
  2. Как мне выяснить, где находятся эти банки и какой путь будет использоваться с -libraryjars в Proguard?

Большое спасибо


Изменить: Я также должен упомянуть, что я использую Установка проекта библиотеки Android . Файлы jar-файлов находятся в основном проекте библиотеки, а в фактическом рабочем проекте есть пути сборки, включая файлы jar-файлов в проекте библиотеки. Не знаю, имеет ли это значение, но подумал, что стоит упомянуть об этом.


Обновление Просто для проверки я полностью удалил jackson далеко от пути сборки и из моего кода, и теперь Proguard успешно завершается. Вопросы все еще остаются ... Каков правильный подход к обработке этих ошибок?

Мастер экспорта Android в Eclipse автоматически добавляет / lib / jars в proguard или их все нужно добавлять вручную в файл конфигурации proguard вот так:

-libraryjars C:/Project/lib/somjar.jar

Я пробовал это для джексона, но это не имело никакого значения. Означает ли это, что мне также нужно найти все банки, необходимые для классов, упомянутых в предупреждениях, и добавить их? Будут ли они в sdk или в установке java?

Извините, если это глупые вопросы, но я пытался разобраться в этом последние пару часов и понятия не имею, что делать.

Еще раз спасибо


Обновить снова

Итак, продолжив поиск, в сочетании с предложением Бенджамина, я обнаружил, что некоторые из недостающих классов были в rt.jar, который находится в папке lib jdk. В итоге я добавил

-libraryjars  <java.home>/lib/rt.jar

в файл proguard.cfg и уменьшил количество предупреждений с 485 до 204. Эй, я думаю, это что-то ...Остальные предупреждения описывают классы, которые я вообще не могу найти. Приложение отлично работает без запуска proguard, так что эти классы должны быть где-то, верно? Или это предупреждения, с которыми я должен использовать -dontwarn ?

Остальные классы находятся в этих пакетах:

org.joda.time.
org.codehaus.stax2.
javax.ws.rs.

Так что теперь мне просто нужен способ выяснить:

  1. В каких банках есть эти классы
  2. Где эти jar-файлы, чтобы я мог включить их в конфигурационный файл proguard
13
задан cottonBallPaws 9 February 2011 в 22:03
поделиться