Android错误:java.lang.NoClassDefFoundError:com.facebook.internal.Utility
我正在使用最新的Facebook Android SDK,并在我最新发布的apk中从我的远程崩溃控制应用程序中的数十个用户那里得到了这个错误。我在这里寻找过这样的错误,但大多数答案对于上一个FB SDK来说都太过时了,在这种情况下,有两种奇怪的情况: a) 这个错误似乎是随机发生的。我根本无法在我的任何设备上复制它 b) 在那个版本和上一个版本之间,FB逻辑没有任何变化,在上一个版本中,我从未遇到过这样的错误 由于我在这些版本之间的代码中找不到任何相关差异,我认为问题是在生成最后一个apk时Android工具可能发生了错误,但鉴于我使用的是同一个apk,无法重现问题,尽管有几十个或更多用户受到影响,数以百计的人使用相同的apk,我也放弃了这样的假设 任何关于如何解决或调试这个问题的想法都是欢迎的 更多相关信息:Android错误:java.lang.NoClassDefFoundError:com.facebook.internal.Utility,java,android,eclipse,facebook,facebook-graph-api,Java,Android,Eclipse,Facebook,Facebook Graph Api,我正在使用最新的Facebook Android SDK,并在我最新发布的apk中从我的远程崩溃控制应用程序中的数十个用户那里得到了这个错误。我在这里寻找过这样的错误,但大多数答案对于上一个FB SDK来说都太过时了,在这种情况下,有两种奇怪的情况: a) 这个错误似乎是随机发生的。我根本无法在我的任何设备上复制它 b) 在那个版本和上一个版本之间,FB逻辑没有任何变化,在上一个版本中,我从未遇到过这样的错误 由于我在这些版本之间的代码中找不到任何相关差异,我认为问题是在生成最后一个apk时An
- 所有崩溃都发生在Android 4.0.3或更高版本中。最高百分比为2.3.6,占所有崩溃的48%
- 该类实际上是在APK中导出的。我通过解压apk并使用dextump查看classes.dex中的内容来检查它。我没想到会有其他东西,因为它在我所有的设备上都能完美工作,如果没有这个类,它也不会 $~/android SDK/build tools/21.1.1/dextump 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调用实用程序的静态方法后,它似乎失败了,而loadAppSettingsAsync恰好是同一类中的静态方法。因此,如果com.facebook.internal.Utility类不存在或无法加载,那么首先如何执行com.facebook.internal.Utility.loadAppSettingsAsync?如果它存在并已加载,为什么会在com.facebook.internal.Utility上抛出NoClassDefFoundError?我很迷茫
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
java.lang.NoClassDefFoundError:com.facebook.internal.Utility$1
位于com.facebook.internal.Utility.void loadAppSettingsAsync(android.content.Context,java.lang.String)(来源未知)
在com.facebook.Settings.void sdkinInitialize(android.content.Context)(未知来源)
在com.facebook.UiLifecycleHelper。(未知来源)
位于net.iberdroid.androidgames.framework.impl.AndroidGame.void onCreate(android.os.Bundle)(未知来源)
位于com.marzoa.ruletafree.xmas2012.RuletaAfortunadaGame.void onCreate(android.os.Bundle)(未知来源)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:121)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:130)
位于android.app.ActivityThread.main(ActivityThread.java:3770)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.ClassNotFoundException:com.facebook.internal.Utility$1装入程序dalvik.system.PathClassLoader[/data/app/com.marzoa.ruletafree.xmas2012-2.apk]
位于dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:551)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:511)
... 还有18个
首先,确保您正在检查正确的类。根据错误消息,“缺少”类是com.facebook.internal.loadAppSettingsAsync$1
。注意$1
!!这意味着我们讨论的是在实用程序.loadAppSettingsAsync
中声明的匿名内部类
其次,java.lang.NoClassDefFoundError
可能有多种原因:
- 这门课可能不见了
- 该类可能存在,但由于某些原因不可加载
- 该类可能是可加载的,但以前尝试初始化该类时。。。或者某个从属类。。。失败了
最后一种情况通常发生在静态初始化或静态初始化程序块在第一次运行时抛出未经检查的异常时。(通常会记录此异常的日志消息。)一旦类初始化失败一次,该类将标记为已断开。这将停止初始化该类以及依赖于它的任何其他类。由于在异步任务的匿名实现的loadAppSettingsAsync中发生NoClassDefFoundError,因此似乎是相同的问题 这是一只虫子
try {
Class.forName("android.os.AsyncTask");
}
catch(Throwable ignore) {
// ignored
}