Android error random java.lang.NoClassDefFoundError: com.facebook.internal.Utility
我正在使用最新的Facebook Android SDK,并在我最新发布的apk中的远程崩溃控制应用程序中从数十个用户那里获得该错误。我在这里寻找过这样的错误,但是对于大多数答案对于上一个FB SDK来说太过时了,在这种情况下,有两种奇怪的情况:
a)错误似乎是随机发生的。我无法在我的任何设备上重现它。
b)该版本和上一个版本之间的FB逻辑没有任何变化,并且在以前的版本中,我从未出现过这样的错误。
由于我无法在此类版本之间的代码中找到任何相关差异,因此我认为问题是Android工具在生成最后一个apk时可能发生了一些问题,但是考虑到我正在使用的apk完全相同的apk并且无法重现问题,尽管数十个或用户受到影响, 数百个使用相同的apk不是,我也放弃了这样的假设。
欢迎任何关于如何解决或调试这件事的想法。
可能相关的更多信息:
- 所有崩溃都发生在Android 4.0.3或更早版本中。最高的百分比是2.3.6,占所有崩溃的48%。
-
该类实际上是在APK中导出的。我已经通过解压缩apk并使用dexdump来检查它,以查看classs.dex中的内容。我不能指望其他东西,因为它在我所有的设备上都能完美地工作,如果课程不在那里,它就不会。
$ ~/android-sdks/build-tools/21.1.1/dexdump classes.dex |grep 'com.facebook.internal.Utility$1' 类描述符 : 'Lcom/facebook/internal/Utility$1;' #0 : (in Lcom/facebook/internal/Utility$1;) #1 : (in Lcom/facebook/internal/Utility$1;) #2 : (in Lcom/facebook/internal/Utility$1;) #0 : (in Lcom/facebook/internal/Utility$1;) #0 : (in Lcom/facebook/internal/Utility$1;) #1 : (in Lcom/facebook/internal/Utility$1;) #2 : (in Lcom/facebook/internal/Utility$1;) #3 : (在Lcom/facebook/internal/Utility$1中;)
在从 loadAppSettingsAsync 调用实用程序的静态方法后,它似乎失败,这恰好是同一类中的静态方法。那么,如果 com.facebook.internal.Utility 类不存在或无法加载,那么 com.facebook.internal.Utility.loadAppSettingsAsync 是如何首先执行的呢?如果它存在并且被加载,为什么NoClassDefFoundError被扔在com.facebook.internal.Utility上?我是如此的迷茫...
这里来自splunk mint(以前称为bugsense)的堆栈,我刚刚更改了应用程序的名称。我用proguard map文件回溯了它,但似乎它还是错过了一些行号:
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