ад proguard - не могу найти указанный класс - PullRequest
120 голосов
/ 07 августа 2011

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

Есть идеи?

Ответы [ 9 ]

125 голосов
/ 10 августа 2011

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

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

ProGuard ад?

8 голосов
/ 03 декабря 2014

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

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

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

5 голосов
/ 03 октября 2018

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

enter image description here

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

2 голосов
/ 17 декабря 2013

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

-dontskipnonpubliclibraryclassmembers
2 голосов
/ 07 августа 2011

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

-dontskipnonpubliclibraryclasses
0 голосов
/ 03 марта 2019

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

-dontwarn package.class.name.**

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

Например:

-dontwarn com.myexternalclass.utils.**
0 голосов
/ 02 февраля 2018

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

0 голосов
/ 11 января 2017

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

0 голосов
/ 07 августа 2011

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

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

...