Facebook的Android ProGuard设置

我终于find了为什么我的应用程序崩溃build立释放。 ProGuard确实从我的应用程序中剥离了代码,但是我通过在proguardandroid.txt(在sdk中find)中使用keep命令手动添加了类,从而避免了这种情况。

对于我使用的Facebook:

-keep class com.facebook.android.* -keep class android.webkit.WebViewClient -keep class * extends android.webkit.WebViewClient -keepclassmembers class * extends android.webkit.WebViewClient { <methods>; } 

但是我想我还是错过了一些东西。 该应用程序现在没有崩溃,但我无法login到Facebook并使用Open Graph。 当我build立在debugging模式,这一切工作正常。

你使用Facebook和Facebook的Open Graph的proguard设置是什么?

编辑

这是我为ProGuard手动添加的命令:

 -dontwarn android.support.** # ActionBarSherlock -keep class android.support.** { *; } -keep interface android.support.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } # Keep line numbers to alleviate debugging stack traces -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -keepclassmembers class * implements java.io.Serializable { private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep class com.facebook.android.* -keep class android.webkit.WebViewClient -keep class * extends android.webkit.WebViewClient -keepclassmembers class * extends android.webkit.WebViewClient { <methods>; } 

编辑2所以没有login的问题是,我用我的debugging哈希键,而不是我释放哈希键。 改变了我的应用程序设置(developers.facebook.com),发现我的应用程序终于login,但login后崩溃。

不知道这是否仍然是一个ProGuard问题,但它返回了这个错误:

 04-02 11:47:31.815: E/AndroidRuntime(9093): FATAL EXCEPTION: main 04-02 11:47:31.815: E/AndroidRuntime(9093): com.facebook.ab: com.facebook.be got an unexpected method signature: public abstract com.facebook.bb com.facebook.bba(java.lang.Class) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.bfa(SourceFile:400) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.beb(SourceFile:546) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.beinvoke(SourceFile:470) 04-02 11:47:31.815: E/AndroidRuntime(9093): at $Proxy1.a(Native Method) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.bb.a(SourceFile:124) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.ar.a(SourceFile:264) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.facebook.as.run(SourceFile:1240) 04-02 11:47:31.815: E/AndroidRuntime(9093): at android.os.Handler.handleCallback(Handler.java:615) 04-02 11:47:31.815: E/AndroidRuntime(9093): at android.os.Handler.dispatchMessage(Handler.java:92) 04-02 11:47:31.815: E/AndroidRuntime(9093): at android.os.Looper.loop(Looper.java:137) 04-02 11:47:31.815: E/AndroidRuntime(9093): at android.app.ActivityThread.main(ActivityThread.java:4931) 04-02 11:47:31.815: E/AndroidRuntime(9093): at java.lang.reflect.Method.invokeNative(Native Method) 04-02 11:47:31.815: E/AndroidRuntime(9093): at java.lang.reflect.Method.invoke(Method.java:511) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 04-02 11:47:31.815: E/AndroidRuntime(9093): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 04-02 11:47:31.815: E/AndroidRuntime(9093): at dalvik.system.NativeStart.main(Native Method) 04-02 11:47:31.820: W/ActivityManager(2130): Force finishing activity com.xxxxx.xxxx/com.xxxxx.views.MainActivity 04-02 11:47:32.360: W/ActivityManager(2130): Activity pause timeout for ActivityRecord{4289ca58 com.xxxxx.xxxxx/com.xxxxx.xxxxx.MainActivity} 

Solutions Collecting From Web of "Facebook的Android ProGuard设置"

固定:

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

代替:

 -keepattributes Signature -keep class com.facebook.android.* -keep class android.webkit.WebViewClient -keep class * extends android.webkit.WebViewClient -keepclassmembers class * extends android.webkit.WebViewClient { <methods>; } 

也一定要检查你的Facebook应用程序设置中的散列键。

在我的情况下你的解决scheme

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

作品,但我必须保持

 -keepattributes Signature 

为了使一切工作。