我在使用Proguard和一些庫的Android項目上遇到了一些麻煩。具體來說,我有一個XmlPullParser碰撞,無論我似乎做什麼,我似乎無法解決它。下面是我使用的庫:問題與Proguard和XmlPullParser
JacksonParser,包括:
- 傑克遜all.1.6.4.jar
- 喬達-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」。在"Conversion to Dalvik format failed with error 1" on external JAR有一個特別的帖子,它指出我有一個重複的XmlPullParser類的方向。這是有意義的,因爲使用的XStream app3_min-1.1.4c.jar,其包括具有比包括在所述的android.jar所述一個更好的/附加的功能性的XmlPullParser。正因爲如此,我已經嘗試了通配符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?事情是,這將解釋優化錯誤,但不是模糊錯誤。我不知道那個。爲什麼不找到這種方法,甚至如果我明確保留它?
謝謝大家。
這實際上爲我工作。至少目前看來我沒有問題。在將我的應用中的部分Google Play服務更新爲最新版本並運行proguard之後,我遇到了此問題。 – Armando