Ад proguard - не могу найти указанный класс

Итак, я пытаюсь выпустить какое-то программное обеспечение, но 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.
[ 

Похоже, что предупреждения относятся к простой рамке, поэтому в моем конфигурационном файле proguard я добавил следующее:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

куда pathtoprojecttolibs это путь к банкам, на которые ссылается мой проект.

Это не имеет значения.

Если ссылки на простой фреймворк javax я могу сказать proguard игнорировать это тоже??

Есть идеи?

8 ответов

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

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

ProGuard, черт возьми?

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

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

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

Эта ошибка возникает из-за того, что используемые вами библиотеки зависят от других библиотек, которые на самом деле не используются, но Proguard ищет их.
Добавьте строки -dontwarn в файл proguard-rules.pro в вашем проекте Android, чтобы отключить эти предупреждения.

введите описание изображения здесь

Вы можете найти зависимости, которые вам нужно добавить в ваш proguard-rules.pro, в трассировке стека вашей ошибки.

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

-dontskipnonpubliclibraryclasses

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

-dontskipnonpubliclibraryclassmembers

В моем случае я ничего не изменил, и стало появляться предупреждение. Проблема была со сломанными кешами gradle. Проверьте мой другой ответ. Я делюсь этим, потому что мне понадобилось 2 часа, чтобы найти проблему:]

Добавьте эту строку в свой proguard-rules.pro файл в каталоге скриптов Gradle:

-dontwarn package.class.name.**

где package.class.name имя пакета с добавленным именем класса файла JAR

Например:

-dontwarn com.myexternalclass.utils.**

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

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

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

Другие вопросы по тегам