对于Facebook的Andr​​oid ProGuard的设置Andr、Facebook、ProGuard、oid

2023-09-13 23:47:25 作者:一夕意相左

我终于找到了为什么我的应用程序崩溃建发布。 ProGuard的确实剥code从我的应用程序,但我$ P $通过手动添加的类与ProGuard的-android.txt在保持命令(在SDK中找到)pvented这一点。

有关Facebook的我用:

  -keep类com.facebook.android。*
-keep类android.webkit.WebViewClient
-keep类*扩展android.webkit.WebViewClient
-keepclassmembers类*扩展android.webkit.WebViewClient {
    <方法&GT ;;
}
 

不过,我想我还是失去了一些东西。该应用程序是免费的崩溃,但现在我可以给Facebook无法登录和使用的Open Graph。当我建立在调试模式下这一切工作正常。

什么是您的ProGuard设置使用Facebook和Facebook的开放图谱?

修改

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

  -dontwarn android.support。**

#ActionBarSherlock

-keep类android.support ** {*。 }

-keep接口android.support ** {*。 }

-keep类com.actionbarsherlock ** {*。 }

-keep接口com.actionbarsherlock ** {*。 }




#保持行号,以减轻调试堆栈跟踪

-renamesourcefileattribute的SourceFile

-keepattributes的SourceFile,LineNumberTable

-keepclassmembers类*实现了java.io.Serializable
{
    私有静态最后java.io.ObjectStreamField [] serialPersistentFields;
    私人无效的writeObject(java.io.ObjectOutputStream中);
    私人无效的readObject(java.io.ObjectInputStream中);
    java.lang.Object中writeReplace();
    java.lang.Object中的readResolve();
}

-keep类com.facebook.android。*
-keep类android.webkit.WebViewClient
-keep类*扩展android.webkit.WebViewClient
-keepclassmembers类*扩展android.webkit.WebViewClient {
    <方法&GT ;;
}
 

编辑2 因此,对于没有登录的问题是,我用我的调试散列键,而不是我放的哈希键。改变了我的应用程序设置(developers.facebook.com),并发现我的应用程序终于登录,但崩溃登录后。

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

  11月四号至2日:47:31.815:E / AndroidRuntime(9093):致命异常:主要
11月4日至2号:47:31.815:E / AndroidRuntime(9093):com.facebook.ab:com.facebook.be得到了一个意想不到的方法签名:公共抽象com.facebook.bb com.facebook.bba(java.lang中。类)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.bfa(的SourceFile:400)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.beb(的SourceFile:546)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.beinvoke(的SourceFile:470)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在$ Proxy1.a(本机方法)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.bb.a(的SourceFile:124)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.ar.a(的SourceFile:264)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.facebook.as.run(的SourceFile:1240)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在android.os.Handler.handleCallback(Handler.java:615)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在android.os.Handler.dispatchMessage(Handler.java:92)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在android.os.Looper.loop(Looper.java:137)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在android.app.ActivityThread.main(ActivityThread.java:4931)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在java.lang.reflect.Method.invokeNative(本机方法)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在java.lang.reflect.Method.invoke(Method.java:511)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:791)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
11月4日至2号:47:31.815:E / AndroidRuntime(9093):在dalvik.system.NativeStart.main(本机方法)
11月4日至2号:47:31.820:W / ActivityManager(2130):强制完成活动com.xxxxx.xxxx / com.xxxxx.views.MainActivity
11月4日至2号:47:32.360:W / ActivityManager(2130):活动暂停超时ActivityRecord {4289ca58 com.xxxxx.xxxxx / com.xxxxx.xxxxx.MainActivity}
 

解决方案

固定的:

  -keep类com.facebook。** {
   *;
}
 

来代替:

  -keepattributes签名
-keep类com.facebook.android。*
-keep类android.webkit.WebViewClient
-keep类*扩展android.webkit.WebViewClient
-keepclassmembers类*扩展android.webkit.WebViewClient {
    <方法&GT ;;
}
 

此外,一定要检查你的散列关键字在你的Facebook应用程序设置。

I finally found out why my app crashes built for release. ProGuard was indeed stripping code from my application but i prevented this by manually adding the classes with the keep command in the proguard-android.txt (found in the sdk).

For Facebook I used:

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

But I think I'm still missing something. The app is crash free now but I can't log in to Facebook and use Open Graph. When I built in debug mode this all works fine.

What are your proguard settings for using Facebook and Facebook's Open Graph?

EDIT

This are my manually added commands for 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 So the problem for not logging in was that I used my debug hash key instead of my release hash key. Changed that in my app settings (developers.facebook.com) and found out that my app finally logs in but crashes after login.

Dont know if this still is a ProGuard problem but it returned this error:

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}

解决方案

fixed:

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

instead of:

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

Also be sure to check your hash key in your facebook app settings.