2013-04-02 40 views
0

我真的用ProGuard/Release爲Android構建了它。我試圖將我的應用程序上傳到遊戲商店,但每次我修復某些內容時都會顯示另一個錯誤。這隻發生在發佈模式。經過大量的試用和錯誤,我的應用程序在Play商店。以前它會在啓動時崩潰(通過在ProGuard設置中添加類來修復)。那麼Facebook難道不登錄(加入ProGuard仍然剝離Facebook代碼? (或者禁用ProGuard !!)

-keep class com.facebook.** { 
    *; 
} 

到的ProGuard設置固定。

現在我的應用程序崩潰,當我試圖與Facebook的Open Graph的連接,併發布消息。我收到此錯誤,真的不能找到任何關於它在網絡上:??

04-02 18:09:20.160: E/AndroidRuntime(16163): FATAL EXCEPTION: main 
04-02 18:09:20.160: E/AndroidRuntime(16163): com.facebook.FacebookGraphObjectException: Factory can't proxy method: public abstract java.lang.String com.xxxx.views.am.a() 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.model.GraphObject$Factory.verifyCanProxyClass(SourceFile:270) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.model.GraphObject$Factory.createGraphObjectProxy(SourceFile:196) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.model.GraphObject$Factory.access$0(SourceFile:195) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.model.GraphObject$Factory$GraphObjectProxy.proxyGraphObjectMethods(SourceFile:530) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.model.GraphObject$Factory$GraphObjectProxy.invoke(SourceFile:470) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at $Proxy3.cast(Native Method) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.facebook.Response.getGraphObjectAs(SourceFile:124) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.xxxxx.views.aa.a(SourceFile:432) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.xxxxxx.views.aa.a(SourceFile:419) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.xxxxx.views.ag.a(SourceFile:377) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.xxxxx.views.ag.onPostExecute(SourceFile:1) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.os.AsyncTask.finish(AsyncTask.java:631) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.os.Looper.loop(Looper.java:137) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at android.app.ActivityThread.main(ActivityThread.java:4931) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at java.lang.reflect.Method.invokeNative(Native Method) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at java.lang.reflect.Method.invoke(Method.java:511) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
04-02 18:09:20.160: E/AndroidRuntime(16163): at dalvik.system.NativeStart.main(Native Method) 

是ProGuard的仍在使用剝出碼IM和什麼設置可以解決這個問題對於記錄..一切都在建立模式的偉大工程

另一個問題。是否可以禁用ProGuard?我認爲是無用的,只會帶來更多的問題。

回答

0

默認情況下,ProGuard處於禁用狀態,在發佈版本中也是如此。您已通過在project.properties文件中啓用proguard.config行來自己啓用它。您可以通過註釋掉該行再次禁用它。

ProGuard可能很有用,但您需要將它配置爲適用於您的應用程序中的任何反射。在這種情況下,Facebook API正在對您自己的課程進行反思。查看API的代碼,它正在GraphObject的擴展中搜索getters,setters和註釋的方法。 ProGuard默認會重新命名甚至刪除它們,因爲它沒有(通常不能)知道反射。其他使用API​​的人可能知道需要保留哪些類,字段和方法。您傳遞給API並具有某些方法命名約定的類可能是很好的候選者。

+0

我設法通過不讓ProGuard混淆或優化任何東西來解決我的問題。 奇怪的是,我的應用程序會在發佈版本中崩潰,而不是當我添加這些設置時(@默認情況下,當我沒有在我的project.properties中添加proguard時)。這會假定proguard會自動運行。 但是我得到它的工作..謝謝你的答案。 –

0

此問題需要花費幾個小時。除了當前的proguard代碼之外,解決方案是排除構建OpenGraphObject的類。所以你可以使用ProGuard而不是關閉它。