Android 启动时java.lang.ClassNotFoundException

Android 启动时java.lang.ClassNotFoundException,android,startup,classnotfoundexception,Android,Startup,Classnotfoundexception,我们在应用程序启动时遇到了非常奇怪的java.lang.ClassNotFoundException,这种情况发生在非常少的客户身上(Build Automatically]中的以下设置(然后可以在以后继续开发时将其重新打开)。我最近在我的应用程序中部署了一个更新,第二天一个用户通过Google Play reporting facility报告了一次崩溃。堆栈转储用于LoadApk(),错误发生在加载我的应用程序类时。这里是垃圾场: java.lang.RuntimeException:无法实

我们在应用程序启动时遇到了非常奇怪的java.lang.ClassNotFoundException,这种情况发生在非常少的客户身上(<1%)。我们从未在dev env中看到过它,我们无法理解这个问题的根源。以下是来自Google play崩溃报告的堆栈跟踪

java.lang.RuntimeException: Unable to instantiate application com.mycompany.myapplication.MyApplication: java.lang.ClassNotFoundException: com.mycompany.myapplication.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.myapplication-1/pkg.apk]
at android.app.LoadedApk.makeApplication(LoadedApk.java:490)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3784)
at android.app.ActivityThread.access$2200(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1082)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4268)
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:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.mycompany.myapplication.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.myapplication-1/pkg.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)
at android.app.Instrumentation.newApplication(Instrumentation.java:972)
at android.app.LoadedApk.makeApplication(LoadedApk.java:481)
... 11 more

当您在应用程序标记的清单文件中输入的任何类名与您的编码java文件不匹配时,就会发生此错误。因此,请以双向方式设置当前值。

如果问题仅发生在已签名的APK上,并且您正在使用Eclipse导出已签名的APK


在Eclipse中“导出并签署APK”之前,请关闭菜单[Project>Build Automatically]中的以下设置(然后可以在以后继续开发时将其重新打开)。

我最近在我的应用程序中部署了一个更新,第二天一个用户通过Google Play reporting facility报告了一次崩溃。堆栈转储用于LoadApk(),错误发生在加载我的应用程序类时。这里是垃圾场:

java.lang.RuntimeException:无法实例化应用程序com.goalstate.WordGames.FullBoard.library.FullBoard应用程序:java.lang.ClassNotFoundException:在路径:DexPathList[],NativelLibraryDirectory=[/vendor/lib,/system/lib]]上未找到类“com.goalstate.WordGames.FullBoard.library.FullBoardApplication” 在android.app.LoadedApk.makeApplication(LoadedApk.java:516)上 位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:4703) 在android.app.ActivityThread.access$1600(ActivityThread.java:175) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:146) 位于android.app.ActivityThread.main(ActivityThread.java:5602) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 在dalvik.system.NativeStart.main(本机方法) 原因:java.lang.ClassNotFoundException:在以下路径上未找到类“com.goalstate.WordGames.FullBoard.library.FullBoardApplication”:DexPathList[],nativeLibraryDirectories=[/vendor/lib,/system/lib]] 位于dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:497) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:457) 位于android.app.Instrumentation.newApplication(Instrumentation.java:981) 在android.app.LoadedApk.makeApplication(LoadedApk.java:511)上 ... 还有11个

我有一个库,我的应用程序类是在该库中定义的。my app(使用库)的清单通过其完整路径引用了该库中的类。它没有自己的应用程序类

我所有的内部测试都没有重现这个问题,甚至当我在同一台设备(实际上是两台不同的设备,一台运行4.3,另一台运行4.4.4)上测试(使用三星远程测试实验室)时,也没有问题

在搜索这方面的信息时,我发现有人提到,不同的设备可能有稍微不同的方法来解析类引用,这可能就是大多数设备对我的APK没有问题的原因,但这个特定的设备(与我的测试设备不同,Sprint为它提供了Android风格)确实存在问题。同样,这也可能是为什么只有百分之一的客户有这个问题,而大多数没有

我决定最好的方法是尽可能简单地让一个简单的设备找到从清单文件引用的类。因此,我在应用程序本身(而不是库)的包中定义了一个新的应用程序类,并让该类从库中的应用程序类继承。新类在其他方面是空的

然后,我将库中应用程序类的完整路径引用替换为我在应用程序本身中创建的新类的相对引用。因此,我们没有:

<application android:name="com.goalstate.WordGames.FullBoard.library.FullBoardApplication"

检查清单,确保标记上的name属性正确无误。检查包是否与包结构匹配。最后是Eclipse>Project>Clean。请发布您的android清单。我将稍后发布清单。然而,我想强调的是,该应用程序对于99%以上的客户来说运行良好。不确定Eclipse,apk构建在完成清理的构建服务器上。我看到了完全相同的问题。我们有一个定制的应用程序类,我们在清单中应用程序标记的name属性中指定它。它对99%的客户有效,但我们仍然看到少数人以这种方式崩溃。我也有同样的问题。应用程序仅在1%的KitKat设备上崩溃。如果是这种情况,则应用程序不应执行。在绝大多数客户中,它运行正常,问题只发生在极少数用户身上。这实际上为我解决了问题。在我的情况下,我有一个活动服务。它安装,运行,一切都很好,但每当手机重新启动时,我都会崩溃(就像在手机完成引导到主屏幕之前,不管是什么)。问题是活动的相对路径名不正确。解决了这个问题,问题就消失了,我将继续讨论,拒绝进一步思考。现在差不多两个月过去了,这个问题再也没有发生过。所以,我认为上述方法确实解决了这个问题。嗨,卡尔,这个错误又回来了吗?对于应用程序的根包(
android:name=“.MyApplication”
)中已经存在的
应用程序
子类,我也遇到了同样的错误。@Sam对于我的应用程序,这让解析小精灵们望而却步。正如我在回答中所描述的,你可能想试试其他的铃、书和蜡烛之类的东西。
<application android:name=".FullBoardWordChumsApplication"