Intereting Posts

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, чтобы игнорировать это тоже ??

Есть идеи?

Solutions Collecting From Web of "Proguard hell – не может найти ссылочный класс"

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

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

Прогульный ад?

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

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

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

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

 -dontskipnonpubliclibraryclasses 

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

 -dontskipnonpubliclibraryclassmembers 

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

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

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