【发布时间】:2014-12-09 13:46:48
【问题描述】:
我正在使用最新的 Facebook Android SDK,并在我最新发布的 apk 中从我的远程崩溃控制应用程序中的数十名用户那里收到该错误。我在这里寻找过这样的错误,但大多数答案对于最后一个 FB SDK 来说太过时了,在这种情况下有两种奇怪的情况:
a) 错误似乎是随机发生的。我根本无法在我的任何设备上重现它。
b) 在那个版本和之前的版本之间,FB 逻辑完全没有变化,在之前的版本中我从来没有遇到过这样的错误。
由于我在这些版本之间的代码中找不到任何相关差异,我认为问题是在生成最后一个 apk 时 Android 工具可能发生了问题,但事实上我使用的是相同的 apk我正在使用并且无法重现该问题,尽管有几十个或用户受到影响,但数百个使用相同 apk 的用户没有受到影响,我也放弃了这样的假设。
欢迎任何关于如何解决或调试此问题的想法。
更多相关信息:
- 所有崩溃都发生在 Android 4.0.3 或更早版本中。百分比最高的是 2.3.6,占所有崩溃的 48%。
-
该类实际上是在 APK 中导出的。我通过解压缩 apk 并使用 dexdump 查看 classes.dex 中的内容来检查它。我无法期待其他事情,因为它在我所有的设备上都能完美运行,如果课程不在那里,它就不会。
$ ~/android-sdks/build-tools/21.1.1/dexdump classes.dex | grep 'com.facebook.internal.Utility$1' 类描述符:'Lcom/facebook/internal/Utility$1;' #0 : (在 Lcom/facebook/internal/Utility$1;) #1 : (在 Lcom/facebook/internal/Utility$1;) #2 : (在 Lcom/facebook/internal/Utility$1;) #0 : (在 Lcom/facebook/internal/Utility$1;) #0 : (在 Lcom/facebook/internal/Utility$1;) #1 : (在 Lcom/facebook/internal/Utility$1;) #2 : (在 Lcom/facebook/internal/Utility$1;) #3 : (在 Lcom/facebook/internal/Utility$1;)
从 loadAppSettingsAsync 调用实用程序的静态方法后似乎失败了,这恰好是同一类中的静态方法。因此,如果 com.facebook.internal.Utility 类不存在或无法加载,那么 com.facebook.internal.Utility.loadAppSettingsAsync 怎么可能首先执行?如果它存在并且已加载,为什么在 com.facebook.internal.Utility 上会抛出 NoClassDefFoundError?我迷路了……
这里是 splunk mint(以前称为 bugsense)的堆栈,我只是更改了应用程序的名称。我用 proguard 映射文件对其进行了追溯,但它似乎还是遗漏了一些行号:
java.lang.NoClassDefFoundError: com.facebook.internal.Utility$1
at com.facebook.internal.Utility.void loadAppSettingsAsync(android.content.Context,java.lang.String)(Unknown Source)
at com.facebook.Settings.void sdkInitialize(android.content.Context)(Unknown Source)
at com.facebook.UiLifecycleHelper.<init>(Unknown Source)
at net.iberdroid.androidgames.framework.impl.AndroidGame.void onCreate(android.os.Bundle)(Unknown Source)
at com.marzoa.ruletafree.xmas2012.RuletaAfortunadaGame.void onCreate(android.os.Bundle)(Unknown Source)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
at android.app.ActivityThread.access$1500(ActivityThread.java:121)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3770)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.facebook.internal.Utility$1 in loader dalvik.system.PathClassLoader[/data/app/com.marzoa.ruletafree.xmas2012-2.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
... 18 more
【问题讨论】:
-
你为 facebook 类使用了什么 proguard 配置?
-
-保留类 com.facebook.** { *; } -keepattributes 签名
标签: java android eclipse facebook facebook-graph-api