首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ProGuard还在剥离Facebook的代码吗?(或禁用ProGuard!!)

ProGuard还在剥离Facebook的代码吗?(或禁用ProGuard!!)
EN

Stack Overflow用户
提问于 2013-04-03 00:17:57
回答 2查看 432关注 0票数 0

我真的受够了安卓的ProGuard / Release版本。我曾尝试将我的应用程序上传到play商店,但每次我修复一些东西时,都会出现另一个错误。而且这只会在发布模式下发生。在经历了多次尝试和错误之后,我的应用程序终于出现在play商店中了。以前它会在启动时崩溃(通过在ProGuard设置中添加类来修复)。然后Facebook将不会登录(通过添加

代码语言:javascript
运行
复制
 -keep class com.facebook.** {
   *;
}

添加到ProGuard设置。

现在,当我尝试连接Facebook的Open Graph并发布消息时,我的应用程序崩溃了。我收到这个错误,但在网上真的找不到任何关于它的东西:

代码语言:javascript
运行
复制
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?我认为这真的没有用,只会带来更多的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 00:26:01

默认情况下,ProGuard处于禁用状态,在发布版本中也是如此。您可以通过在project.properties文件中启用proguard.config行来自己启用它。您可以通过注释掉该行来再次禁用它。

ProGuard可能很有用,但您需要为应用程序中的任何反射配置它。在这种情况下,Facebook API在您自己的类上执行反射。查看该应用程序接口的代码,它将搜索GraphObject扩展中的getter、setter和带注释的方法。默认情况下,ProGuard会重命名甚至删除它们,因为它不(通常也不能)知道反射。其他使用API的用户可能知道需要保留哪些类、字段和方法。传递给API并具有一些方法命名约定的类可能是很好的候选者。

票数 0
EN

Stack Overflow用户

发布于 2013-11-15 22:32:00

这个问题花了我好几个小时。解决方案是除了当前的proguard代码之外,排除构建OpenGraphObject的类。所以你可以使用ProGuard而不是关闭它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15769109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档