其實這是好久以前的問題了,但AdMob SDK改版多次也沒有改善,所以還是記錄一下以供備忘。
當你的App使用AdMob SDK 6.2.0或之後的版本,在Expore Signed APK時ProGuard可能會出現以下的錯誤(內容可能依AdMob SDK版本而異):
Proguard returned with error code 1. See console
Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState
Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState
You should check if you need to specify additional program jars.
Warning: there were 2 unresolved references to classes or interfaces.
You may need to specify additional library jars (using '-libraryjars').
java.io.IOException: Please correct the above warnings first.
at proguard.Initializer.execute(Initializer.java:321)
at proguard.ProGuard.initialize(ProGuard.java:211)
at proguard.ProGuard.execute(ProGuard.java:86)
at proguard.ProGuard.main(ProGuard.java:492)
一開始試著在proguard-project.txt裡加上-keep class com.google.ads.** {*;},但沒有效果。之後上Google Group詢問才有位Goolger回說可以忽略這些Warning,因此只要在proguard-project.txt裡再加上下面這行就行了。
-dontwarn com.google.ads.**
相關連結:
https://groups.google.com/forum/?fromgroups#!topic/google-admob-ads-sdk/JllLSIXWtBk
2013年5月20日星期一
2013年5月16日星期四
Proguard returned with error code 1 (Unexpected end of ZLIB input stream) 的奇怪問題
今天更新了ADT 22.0.0後,除了發生NoClassDefFoundError的錯誤之外,還遇到另一個奇怪的問題。
某個專案在Export Signed APK時,Proguard會出現下面這個錯誤:
Proguard returned with error code 1. See console
java.io.IOException: Can't read [E:\android-work2\ActionBarSherlock-4.2.0\library\bin\actionbarsherlock-4.2.0.jar] (Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream))
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.InputReader.readInput(InputReader.java:178)
at proguard.InputReader.execute(InputReader.java:78)
at proguard.ProGuard.readInput(ProGuard.java:196)
at proguard.ProGuard.execute(ProGuard.java:78)
at proguard.ProGuard.main(ProGuard.java:492)
Caused by: java.io.IOException: Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream)
at proguard.io.ClassReader.read(ClassReader.java:112)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.JarReader.read(JarReader.java:65)
at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
at proguard.InputReader.readInput(InputReader.java:226)
... 6 more
Caused by: java.lang.RuntimeException: Unexpected end of ZLIB input stream
at proguard.classfile.io.RuntimeDataInput.readFully(RuntimeDataInput.java:112)
at proguard.classfile.io.ProgramClassReader.visitUtf8Constant(ProgramClassReader.java:249)
at proguard.classfile.constant.Utf8Constant.accept(Utf8Constant.java:148)
at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:97)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
at proguard.io.ClassReader.read(ClassReader.java:91)
... 11 more
看起來似乎是我使用的某個第三方函式庫出問題,但奇怪的是其他使用相同函式庫的專案確沒有問題。檢查了專案設定也看不出有什麼異常。更怪的是還不是每次都會發生,偶爾會僥倖讓我輸出成功...(囧)
最後查到也有人遇到這樣的問題,中間他試了好幾種方法都不能完全解決,目前他使用的方法是在Export Signed APK前先將Eclipse的Project -> Build Automatically關閉。
我按照他的方法,雖然有點麻煩但確實能避開這個問題,在此分享給各位~
參考連結:
http://android.deveronline.com/2012/02/proguard-returned-with-error-code-1-after-update-from-adt-1.html
某個專案在Export Signed APK時,Proguard會出現下面這個錯誤:
Proguard returned with error code 1. See console
java.io.IOException: Can't read [E:\android-work2\ActionBarSherlock-4.2.0\library\bin\actionbarsherlock-4.2.0.jar] (Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream))
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.InputReader.readInput(InputReader.java:178)
at proguard.InputReader.execute(InputReader.java:78)
at proguard.ProGuard.readInput(ProGuard.java:196)
at proguard.ProGuard.execute(ProGuard.java:78)
at proguard.ProGuard.main(ProGuard.java:492)
Caused by: java.io.IOException: Can't process class [com/actionbarsherlock/widget/SearchView$3.class] (Unexpected end of ZLIB input stream)
at proguard.io.ClassReader.read(ClassReader.java:112)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.JarReader.read(JarReader.java:65)
at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
at proguard.InputReader.readInput(InputReader.java:226)
... 6 more
Caused by: java.lang.RuntimeException: Unexpected end of ZLIB input stream
at proguard.classfile.io.RuntimeDataInput.readFully(RuntimeDataInput.java:112)
at proguard.classfile.io.ProgramClassReader.visitUtf8Constant(ProgramClassReader.java:249)
at proguard.classfile.constant.Utf8Constant.accept(Utf8Constant.java:148)
at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:97)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
at proguard.io.ClassReader.read(ClassReader.java:91)
... 11 more
看起來似乎是我使用的某個第三方函式庫出問題,但奇怪的是其他使用相同函式庫的專案確沒有問題。檢查了專案設定也看不出有什麼異常。更怪的是還不是每次都會發生,偶爾會僥倖讓我輸出成功...(囧)
最後查到也有人遇到這樣的問題,中間他試了好幾種方法都不能完全解決,目前他使用的方法是在Export Signed APK前先將Eclipse的Project -> Build Automatically關閉。
我按照他的方法,雖然有點麻煩但確實能避開這個問題,在此分享給各位~
參考連結:
http://android.deveronline.com/2012/02/proguard-returned-with-error-code-1-after-update-from-adt-1.html
升級ADT 22後專案出現NoClassDefFoundError錯誤的解法
Google I/O 13 開始的同時,ADT & SDK Tools 也同步更新了。但不幸的是將 ADT 升級到 22.0.0 之後,好幾個原本正常的專案又變紅了...想想這種事情以前也發生過。
查了一下,也有人遇到類似的情況,解法如下:
1.開啟專案設定頁面(右鍵點選專案然後選擇 "Properities",或用鍵盤 "Alt + Enter" )
2.選擇 "Java Build Path"
3.選擇 "Order and Export"分頁
4.勾選 "Android Private Libraries",而 "Android Dependencies" 則可不用勾選
5.Clean 專案並重新編譯執行應該就行了
只能再說一次 ADT 你好樣的!
參考連結:
https://plus.google.com/109801186705736971269/posts/dg2M1xM5Mv4
https://plus.google.com/u/0/117122118961369445953/posts/CzoG9tRTJFT
查了一下,也有人遇到類似的情況,解法如下:
1.開啟專案設定頁面(右鍵點選專案然後選擇 "Properities",或用鍵盤 "Alt + Enter" )
2.選擇 "Java Build Path"
3.選擇 "Order and Export"分頁
4.勾選 "Android Private Libraries",而 "Android Dependencies" 則可不用勾選
5.Clean 專案並重新編譯執行應該就行了
只能再說一次 ADT 你好樣的!
參考連結:
https://plus.google.com/109801186705736971269/posts/dg2M1xM5Mv4
https://plus.google.com/u/0/117122118961369445953/posts/CzoG9tRTJFT
訂閱:
文章 (Atom)
