工作应用程序中的java.lang.ClassNotFoundException

我创build并发布了我的第一个Android应用程序。 这很简单。 它在模拟器和一些手机上工作正常,但我得到这个错误:

java.lang.RuntimeException: Unable to instantiate application cz.teamnovak.droid.Novak ESC Track guide: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk] at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232) at android.app.ActivityThread.access$3000(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) at java.lang.ClassLoader.loadClass(ClassLoader.java:573) at java.lang.ClassLoader.loadClass(ClassLoader.java:532) at android.app.Instrumentation.newApplication(Instrumentation.java:942) at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644) ... 11 more 

任何想法可能导致这个?

是的,我有这个完全相同的问题。 这是因为我在清单文件中的应用程序节点中指定了android:name属性。

你的Android Manifest文件可能看起来像这样:

  <application android:name="Novak ESC Track guide" android:icon="@drawable/icon" android:label="@string/app_name" android:description="@string/help_text" > 

不要使用android:name属性! 除非你已经实现了一个自定义的Application对象。

application:name属性与您的应用程序的名称无关。 这是要作为Application实例加载的特定类的名称。 这就是为什么你会得到ClassNotFoundException如果该类不存在。

对于应用程序的名称,请使用同一个应用程序节点上的android:label属性。

删除它,它应该工作:

 <application android:icon="@drawable/icon" android:label="@string/app_name" android:description="@string/help_text" > 

当我将构build目标更改为3.2时发生了这样的事情。 挖了四周后,我发现已经命名了jar lib文件夹“lib”而不是“libs”。 我只是将它重命名为libs并更新了java构buildpath上的引用,并且所有事情都再次运行。 也许这会帮助别人…

我们有几个项目在Android Market上不时logging此问题。 我在清单中发现了以下问题:

  1. 如果包名称是com.test,则活动名称应该是.ActivityName (带有一个前导点),而不仅仅是ActivityName

  2. 对于一些最常出现在日志中的类,类名被指定为com.test.Name而它应该是.Name

我猜android的许多实现成功地处理这些小问题(这就是为什么在testing中从未发生exception),而其他人很less抛出exception。

有同样的错误:java.lang.RuntimeException:无法实例化活动(classnotfound)首先尝试更改构build平台(2.3.3 – > 2.2 – > 2.3.3)为我工作。

这是我对错误的观察。 我最近更新了ADT到22.0.1。 我得到以下错误,当我导入我以前的项目“E / AndroidRuntime(24807):引起:java.lang.ClassNotFoundException:com.sherl.sherlockfragmentsapp.StartActivity在加载器dalvik.system.PathClassLoader [/数据/应用程序/ com。 sherl.sherlockfragmentsapp-1.apk]”

然后我改变了“属性 – > Java构buildpath – >订单和导出”在以下方式[由于论坛规则无法添加图像]

  1. Android私人图书馆 – 检查
  2. Android 4.2.2 – 未选中
  3. Android依赖 – 检查
  4. / src – 选中
  5. / gen – 选中

它解决了这个问题。 希望这是帮助你们。

谢谢

我知道这个问题已经得到解答,情况可能不是这样。 但我得到这个错误,并认为我会发布为什么以防万一它可以帮助其他人。

所以我得到这个错误,几个小时后,怯意地意识到,我没有选中“项目”>“自动构build”。 所以,虽然我没有编译错误,这就是为什么我得到这个错误。 一旦我意识到在部署之前我没有实际构build项目,一切都开始工作: – /

那么,这是我的故事:-)

升级到最新的ADT / SDK后,今天遇到这种问题。 花了我一段时间。 检查我用谷歌apis(地图),使用库,清理项目等

删除.project并添加一个新的(创build新的android项目)终于解决了它。

我有这个问题有时与日食。 对我来说,更正的方法是转到Project Properties / Android,然后将构build目标API更改为其他版本并重新发布。 我会发现纠正它,然后我可以将其更改回到所需的构build目标。

要么

你可能需要检查你的proguard.cfg

假设你已经正确地链接了你的库,并且你的库项目有你需要标记为导出的代码,那么你可能要做的下一步是检查你的proguard设置,并确保你没有剥离你需要的类。

当我的应用程序直接从eclipse中运行到模拟器或设备后,我正在为此苦苦挣扎。 我遇到的问题是应用程序发布后(即通过proguard),并在设备上运行,它丢失了项目中包含的类。 不知何故,他们被剥夺了。

当我尝试使用IntelliJ并切换回eclipse时,可能导致了我的问题。

这是为我工作的proguard文件:

 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembers class * { native <methods>; } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } 

在我的情况下,我不得不在主要活动的清单文件中添加android:name=".activity.SkeletonAppActivity"而不是android:name=".SkeletonAppActivity"SkeletonAppActivity与应用程序类不同。 祝你好运!

确保清单文件中的android:hasCode没有设置为false 。 这是为我解决了这个问题!

我在早期版本的Android上运行我的应用程序时遇到了这个错误。 我以为SearchView向后兼容Android 1.5,但它是在3.0中创build的。 我从代码中删除了它的引用,它工作。

那么你有一个java.lang.ClassNotFoundException。 这意味着应用程序运行时中缺less一个类。 您应该检查是否已将所有库添加到构buildpath。

右键单击您的项目 – >属性 – > java构buildpath – >库,添加您的库或创build一个包含您的类,并启用命令导出您的库。

在我的情况下,该应用程序的图标导致错误:

 <application android:name="com.test.MyApp" android:icon="@drawable/myicon" 

为什么? 因为我只把图标放在“drawable”的文件夹中,而且我使用的是高分辨率的testing设备,所以它在文件夹“drawable-hdpi”中查找图标。 如果不在“drawable-hdpi”中,所有其他的默认行为是使用“drawable”的图标。 但是对于启动图标,这似乎不是有效的。

所以解决办法是在“drawable-hdpi”(或设备支持的任何分辨率)下放一个图标的副本(当然是同名)。

我使用了一种超types的方法,在我的一个Activity中(特别是'isResumed()'方法)被声明为'final'。 只有在重新启动我的开发设备后,才会在LogCat中显示实际的错误。

未find的类错误显示您的类文件丢失。 如果发现丢失,请转到“ 属性”>“Java构buildpath” ,并将包含java文件的包添加到“ 源”选项卡。 然后build立你的项目。 这将创build缺less的.class文件。

我最近投入了一些时间在类似的错误报告,通过播放存储错误报告。

一些可能的原因概述。

缺less图书馆

由于我的应用程序在发布之前进行testing,并且问题只发生在约。 一个星期一次,我很确定我不是一个图书馆问题。 如果系统上的构build失败,并且使用ADB安装应用程序导致启动时出错,则应该考虑这个方向。

如果这是一个本地问题,清理和构build您的项目可能会有所帮助,并确保您拥有最新版本的SDK和IDE。

在这些情况下,您的应用程序或应用程序中使用的一类应用程序会触发该错误。 这是与您的应用程序的入口点(具有主要意图的活动或您的自定义服务/应用程序对象)未find的下一个点的重要区别。

如果是的话,看看我select的以下问题和答案。 他们都有一个被接受的答案。

无法实例化应用程序 – ClassNotFoundException Android Activity ClassNotFoundException – 尝试一切 Android ClassNotFoundException

未find主要活动或应用程序

AndroidManifest.xml的configuration错误

更像是一个初学者的错误,在这里引用了一个关于android清单文件的答案。

这里重要的是,这个错误将永远阻止你的应用程序加载。 它应该虽然build立,但第一次使用崩溃。

我已经编辑了这个答案,这是重要的部分:

不要使用android:name属性! 除非你已经实现了一个自定义的Application对象。

应用程序:name属性与您的应用程序的名称无关。 这是要作为应用程序实例加载的特定类的名称。 这就是为什么你会得到ClassNotFoundException如果该类不存在。

对于应用程序的名称,请使用同一个应用程序节点上的android:label属性。

禁止:java.io.IOException:无法打开DEX文件

现在它变得有趣了! 这是我通过playstorelogging的堆栈跟踪的一部分。 所以我可以创build一个构build并在我的设备上执行,而不会出错(而以前的所有错误都会阻止任何运行)。

一个重要的评论是对以下SO问题Android应用程序ClassNotFoundException,无法实例化应用程序

看起来像系统有麻烦打开你的应用程序dex文件java.io.IOException:无法打开DEX文件,这是在你的任何类加载之前,所以它没有任何关系如何定义你的应用程序类在清单。 – user2046264 14年2月27日在2:25

这里的重要部分是被压缩的IOException。 这表示IO操作失败。 IO操作的例子是networking和存储调用。

在Android中列出了进入该方向的另一个错误报告, 无法实例化应用程序java.lang.ClassNotFoundException:其中提到了由SD卡提供的外部存储的angular色。

其他一些类似的问题表明,这可能是一个用户错误。 “/ mnt / asec / …”表示应用程序正在从SD卡运行。 如果SD卡被删除,可能会导致此错误。 第三方应用程序或根植设备可能会移动应用程序到SD卡,即使清单不允许。

如果你绝望地阅读所有的问题的答案,因为还有其他的path列出。 想想完整的包装规格,使用单身和更多。

这里的重点是networking和存储都是IO。

对于我的具体情况,我查了所有报告这个错误的设备,发现它们都有外部存储支持。 所以用户可以安装应用程序并将其移动到外部存储,删除SD卡,并得到这个错误(只是一个理论,没有testing)。

有关installLocation选项的更多信息,请参阅http://developer.android.com/guide/topics/data/install-location.html

我也考虑过这个networking。 在Play商店报告的堆栈跟踪详细信息页面顶部,您将看到随时间推移发生的错误概况。

在我看来,错误发生在更新发布的时间周围。 这可以支持用户获得应用程序更新的理论,下载这个更新,以某种方式被损坏。 安装很好,但应用程序的第一次执行导致错误(再次只是一个理论,没有testing)。

其他资源

最后2个非SO资源可以帮助你:

https://groups.google.com/forum/#!topic/android-developers/JC7_qqwBRjo https://code.google.com/p/android/issues/detail?id=72121

你是否在不同的环境中使用你的代码,比如说使用Dropbox或者类似的东西? 你使用任何图书馆或类似的? 共享工作区文件后,我遇到了很多麻烦,我修复了重新configuration依赖关系的问题。 希望它可以帮助别人!

检查类中的包名称是否与清单文件中的包名称匹配。 这对我有效

在我的情况下,当我将我的启动器活动移动到不同的包而不更新清单文件时发生。

我有一个ClassNotFoundException指向我的应用程序类。

我发现我在.project中错过了Java构build器

如果buildSpec中缺less某些东西,请closuresEclipse,确保一切正常,然后再次启动Eclipse

  <buildSpec> <buildCommand> <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>com.android.ide.eclipse.adt.ApkBuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> 

我有同样的问题在Android操作系统版本4.1.2

在应用程序标记中将下面的行添加到android:label="@string/app_name"下方的AndroidManifest.xml

 android:name="android.support.multidex.MultiDexApplication" 

这可能会帮助一些有同样问题的人。

对于我来说,从Eclipse“closures”应用程序和“重新打开”项目,解决了这个问题。