我正在使用最新的Facebook Android SDK,并在最新发布的apk中从远程崩溃控制应用程序中的数十个用户中获取了该错误。我在这里查找了此类错误,但是对于最后一个FB SDK而言,大多数答案都已经过时了,在这种情况下,有两种奇怪的情况:
a)错误似乎是随机发生的。我一直无法在任何设备上重现它。
b)在该发行版和上一个发行版之间,FB逻辑根本没有任何变化,在以前的发行版中,我从未发生过这样的错误。
由于我找不到这些版本之间代码的任何相关差异,因此我认为问题是在生成最后一个apk时Android Tools可能发生了一些错误,但事实是,我使用的apk与一直无法重现该问题,尽管有数十个用户受到影响,但数百个使用相同apk的用户却没有受到影响,我也放弃了这种假设。
欢迎提供有关如何解决或调试此问题的任何想法。
可能相关的更多信息:
该类实际上是在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
由于NoClassDefFoundError发生在AsyncTask的匿名实现的loadAppSettingsAsync中,因此似乎是类似的问题,例如NoClassDefFoundError-Android 2.3.X
它是Google Play服务中的错误。(https://code.google.com/p/android/issues/detail?id=81083)
尝试Application#onCreate()
按照参考问题的答案中所述,在您的方法中添加以下内容。
try {
Class.forName("android.os.AsyncTask");
}
catch(Throwable ignore) {
// ignored
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句