У меня возникли проблемы с проектом Android, использующим Proguard с некоторыми библиотеками. В частности, у меня возникает коллизия XmlPullParser, и что бы я ни делал, я не могу ее решить. Вот библиотеки, которые я использую:
JacksonParser, включает:
- Джексон-все.1.6.4.jar
- Joda-time.1.6.2.jar
- jsr311-api-1.0.jar
- stax2-api-3.0.0.jar
XStream, который включает:
- xpp3_min-1.1.4c.jar
- xstream-для-android-1.0.0.jar
Есть и другие, но это не проблема. Кажется, они являются виновниками наших проблем.
В частности, проблемы:
Оптимизация
если я делаю оптимизацию, я получаю «преобразование в dalvik не удалось с 1». Об этом есть специальное сообщение в Преобразование в Форматирование Dalvik завершилось с ошибкой 1 во внешнем JAR, что указало мне на наличие дублирующегося класса XmlPullParser. Это имеет смысл, так как XStream использует app3_min-1.1.4c.jar, который включает в себя XmlPullParser, который имеет лучшую/дополнительную функциональность, чем включенный в android.jar. Таким образом, я попытался удалить подстановочный знак xmlpull ** из android.jar:
-libraryjars <java.home>/lib/rt.jar;C:/Android/platforms/android-9/android.jar(!org/xmlpull/v1/**)
и я также пытался явно удалить их:
-libraryjars <java.home>/lib/rt.jar;C:/Android/platforms/android-9/android.jar(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class,!org/xmlpull/v1/XmlPullParserFactory,!org/xmlpull/mxp1/MXParser)
но ни один фикс не помог.
но подождите, есть еще (все вокруг одной и той же проблемы, поэтому я думаю, что если я решу эту, остальные исчезнут).
Запутывание
Если я попытаюсь запутать, я получаю следующую ошибку времени выполнения:
java.lang.NoSuchMethodError: android.content.res.XmlResourceParser.s
looking this up in the mapping, i get: .s = abstract int next()
поэтому отсутствует метод next(). так почему этот метод отсутствует? я не понимаю. я даже пытался сделать это:
-keep class android.content.res.XmlResourceParser { int next(); }
чтобы убедиться, что этот метод сохраняется, но все же я получаю ту же проблему.
Уменьшение
Сокращение также кажется неудачным. приложение запускается, но никуда не приходит, оно просто продолжает пытаться запустить первое действие снова и снова и выдает мне бесполезную ошибку. я пока не так беспокоюсь об этом, я могу жить без сжатия, если я смогу заставить работать обфускацию и оптимизацию.
Подробнее
В качестве ориентира я пытался ссылаться на свои библиотеки двумя способами, первый из которых использует injars:
-injars ReferencedAssemblies/XStream/xpp3_min-1.1.4c.jar(!META-INF/MANIFEST.MF)
-injars ReferencedAssemblies/JacksonParser/jackson-all-1.6.4.jar(!META-INF/MANIFEST.MF,!META-INF/ASL2.0,!META-INF/LICENSE,!META-INF/NOTICE)
-injars ReferencedAssemblies/JacksonParser/joda-time-1.6.2.jar(!META-INF/MANIFEST.MF)
-injars ReferencedAssemblies/JacksonParser/jsr311-api-1.0.jar(!META-INF/MANIFEST.MF)
-injars ReferencedAssemblies/JacksonParser/stax2-api-3.0.0.jar(!META-INF/MANIFEST.MF)
-injars ReferencedAssemblies/XStream/xstream-for-android-1.0.0.jar(!META-INF/MANIFEST.MF)
это даже не построится.
я также сделал это:
-libraryjars <java.home>/lib/rt.jar
;C:/Android/platforms/android-9/android.jar(!org/xmlpull/v1/**)
#;C:/Android/platforms/android-9/android.jar(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class,!org/xmlpull/v1/XmlPullParserFactory,!org/xmlpull/mxp1/MXParser)
;ReferencedAssemblies/JacksonParser/jackson-all-1.6.4.jar(!META-INF/MANIFEST.MF,!META-INF/ASL2.0,!META-INF/LICENSE,!META-INF/NOTICE)
;ReferencedAssemblies/JacksonParser/joda-time-1.6.2.jar(!META-INF/MANIFEST.MF)
;ReferencedAssemblies/JacksonParser/jsr311-api-1.0.jar(!META-INF/MANIFEST.MF)
;ReferencedAssemblies/JacksonParser/stax2-api-3.0.0.jar(!META-INF/MANIFEST.MF)
;ReferencedAssemblies/XStream/xpp3_min-1.1.4c.jar(!META-INF/MANIFEST.MF)
это заводит меня дальше всего, я могу экспортировать APK, если не оптимизирую.
я также сделал это:
-dontwarn org.xmlpull.v1.**
так как это, кажется, известная проблема (см. предыдущую ссылку)
Кто-нибудь знает, что здесь происходит или как я могу это решить? у меня такое ощущение, что это как-то связано с тем фактом, что я использую и XStream, и JacksonParser, и, возможно, в одной из библиотек JacksonParser также есть XmlPullParser? Дело в том, что это объяснило бы ошибку оптимизации, но не ошибку обфускации. я понятия не имею об этом. почему бы ему не найти этот метод, даже если я его явно сохранил?
Спасибо всем.