Proguard hell - не может найти ссылочный класс

Итак, я ПЫТАЮСЬ к выпуску некоторого программного обеспечения, но 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, чтобы игнорировать это тоже??

Любые идеи?

Ответ 1

org.simpleframework.xml.stream.StreamReader в вашем коде относится к javax.xml.stream.events.XMLEvent. Последний класс является частью среды выполнения Java (rt.jar), но не является частью среды выполнения Android (android.jar), поэтому ProGuard предупреждает, что что-то может быть нарушено. Если вы уверены, что ваше приложение работает в любом случае, вы можете указать

-dontwarn javax.xml.stream.events.**

Прогорный ад?

Ответ 2

В моем случае основной причиной было здесь. Эти предупреждения можно просто пропустить:

-dontwarn org.simpleframework.xml.stream.**

Оригинальный ответ здесь

Ответ 3

Вы должны включить это в свою конфигурацию Proguard:

-dontskipnonpubliclibraryclasses

Ответ 4

Мой волшебный ключ, который решил мои часы поиска: Добавьте это в progruard-android.txt

-dontskipnonpubliclibraryclassmembers

Ответ 5

Хм. Чтение этого предупреждения казалось бы, что библиотека, которую вы пытаетесь использовать, зависит от javax.xml.stream.events. Я не думаю, что пространство имен вообще включено в андроид. (См. Индекс пакета).

Попробуйте установить его в эмулятор без использования proguard и посмотреть, работает ли он. Мое предположение не было бы, если бы это предупреждение было точным.

Ответ 6

Я думаю, что это краевой случай, но в моем случае мне пришлось полностью стереть папку с сборкой на моей Jenkins proguard, которая пыталась работать со старым кодом, которого больше не было - на всякий случай у кого-то такая же проблема.