2013-04-02 4 views
26

私のアプリがリリース用にビルドされた理由をついに知りました。 ProGuardは実際に私のアプリケーションからコードを削除していましたが、proguard-android.txt(sdkにあります)にkeepコマンドを使ってクラスを手動で追加することでこれを防ぐことができました。 Facebook用のAndroid ProGuardの設定

はFacebookのために私が使用:

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

しかし、私はまだ何かが欠けていると思います。アプリは現在クラッシュフリーですが、FacebookにログインしてOpen Graphを使用することはできません。私がデバッグモードでビルドすると、これはうまく動作します。

FacebookとFacebookのOpen Graphを使用するためのプロゴア設定は何ですか?

EDIT

この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>; 
} 

EDIT 2 だから私はするのではなく、私のデバッグハッシュキーを使用したことだったのログインではないため、問題の私リリースハッシュキー。私のアプリの設定(developers.facebook.com)でそれを変更し、私のアプリは最終的にログインしたが、ログイン後にクラッシュすることが分かった。

いけない、これはまだ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.b.e got an unexpected method signature: public abstract com.facebook.b.b com.facebook.b.b.a(java.lang.Class) 
04-02 11:47:31.815: E/AndroidRuntime(9093):  at com.facebook.b.f.a(SourceFile:400) 
04-02 11:47:31.815: E/AndroidRuntime(9093):  at com.facebook.b.e.b(SourceFile:546) 
04-02 11:47:31.815: E/AndroidRuntime(9093):  at com.facebook.b.e.invoke(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} 

答えて

51

-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のアプリの設定であなたのハッシュキー。私の場合、ソリューション

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

作品で

+5

+1、あなたのソリューションを共有していただきありがとうございます。 – Prateek

+6

[Facebookの自身のガイド](https://developers.facebook.com/docs/android/getting-started#proguard)は役に立ちませんでした。ジョークFBのドキュメントはなんとすごいですか? – Sufian

+1

しかし、それはFacebook SDKの中の何かを難読化しません。 SDKのすべての機能を使用しているわけではありませんが、単にコードの中にあるだけです。どちらが悪いですか。 –

21

が、私は働いてすべてを取得するために

-keepattributes Signature 

を維持しなければなりませんでした。