我真的受够了安卓的ProGuard / Release版本。我曾尝试将我的应用程序上传到play商店,但每次我修复一些东西时,都会出现另一个错误。而且这只会在发布模式下发生。在经历了多次尝试和错误之后,我的应用程序终于出现在play商店中了。以前它会在启动时崩溃(通过在ProGuard设置中添加类来修复)。然后Facebook将不会登录(通过添加
-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还在剥离我正在使用的代码吗?什么设置可以解决这个问题?郑重声明..在构建模式下,一切工作正常。
另一个问题。是否可以仅禁用ProGuard?我认为这真的没有用,只会带来更多的问题。
发布于 2013-04-04 00:26:01
默认情况下,ProGuard处于禁用状态,在发布版本中也是如此。您可以通过在project.properties
文件中启用proguard.config
行来自己启用它。您可以通过注释掉该行来再次禁用它。
ProGuard可能很有用,但您需要为应用程序中的任何反射配置它。在这种情况下,Facebook API在您自己的类上执行反射。查看该应用程序接口的代码,它将搜索GraphObject扩展中的getter、setter和带注释的方法。默认情况下,ProGuard会重命名甚至删除它们,因为它不(通常也不能)知道反射。其他使用API的用户可能知道需要保留哪些类、字段和方法。传递给API并具有一些方法命名约定的类可能是很好的候选者。
发布于 2013-11-15 22:32:00
这个问题花了我好几个小时。解决方案是除了当前的proguard代码之外,排除构建OpenGraphObject的类。所以你可以使用ProGuard而不是关闭它。
https://stackoverflow.com/questions/15769109
复制相似问题