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, которая пыталась работать со старым кодом, которого больше не было - на всякий случай у кого-то такая же проблема.