Android随机错误java.lang.NoClassDefFoundError:com.facebook.internal.Utility

Fra*_*zoa 14 java eclipse android facebook facebook-graph-api

我正在使用最新的Facebook Android SDK,并在我最新发布的apk中从我的远程崩溃控制应用程序中的数十个用户那里获得该错误.我在这里看到了这样的错误,但大多数答案对于最后一个FB SDK来说太过时了,在这种情况下有两种奇怪的情况:

a)错误似乎是随机发生的.在我的所有设备上,我都无法重现它.

b)在该版本和前一版本之间FB逻辑没有任何变化,在之前的版本中我从未遇到过这样的错误.

由于我在这些版本之间的代码中找不到任何相关的差异,我认为问题是Android Tools在生成最后一个apk时可能发生的错误,但是给出的事实是我正在使用的那个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调用Utility的静态方法后,它似乎失败了,这恰好是同一个类中的静态方法.因此,如果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
Run Code Online (Sandbox Code Playgroud)

小智 5

由于NoClassDefFoundError发生在asAppTask的匿名实现的loadAppSettingsAsync中,它似乎是同样的问题,如NoClassDefFoundError - Android 2.3.X

它是谷歌播放服务中的一个错误.(https://code.google.com/p/android/issues/detail?id=81083)

尝试将以下内容添加到您的Application#onCreate()方法中,如所引用问题的答案中所述.

try {
    Class.forName("android.os.AsyncTask");
}
catch(Throwable ignore) {
    // ignored
}
Run Code Online (Sandbox Code Playgroud)