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

Sko*_*oky 51 android classnotfoundexception

我创建并发布了我的第一个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
Run Code Online (Sandbox Code Playgroud)

知道是什么原因引起的吗?

phr*_*ead 41

是的,我有同样的问题.这是因为我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" >
Run Code Online (Sandbox Code Playgroud)

不要使用该android:name属性!除非您已实现自定义Application对象.

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

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

删除它,它应该工作:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:description="@string/help_text" >
Run Code Online (Sandbox Code Playgroud)

  • 如果你有自己的扩展Application的应用程序类,则需要android:name.它是你的应用程序的名称,所以android:name对我来说似乎是正确的术语.但是,如果您不需要自己的应用程序类,我同意这会产生误导. (54认同)

小智 14

当我将构建目标更改为3.2时,发生了类似的事情.在挖掘之后,我发现一个人将jar文件夹命名为"lib"而不是"libs".我刚刚将它重命名为libs并更新了Java构建路径上的引用,一切都恢复了.也许这会帮助别人......


小智 10

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

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

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

我想Android的许多实现都能成功处理这些小问题(这就是测试中从未发生异常的原因),而其他几个实例则抛出异常.

  • 接得好.我也遇到了应用程序名称属性的问题,大多数设备都使用"MyApplicationSubclass"工作得很好,但有些设备在启动时会崩溃.更改为"my.package.MyApplicationSubclass"修复了该问题.某些版本/供应商在这些问题上更容忍其他人. (2认同)

Rig*_*key 5

我有时在使用 eclipse 时会遇到这个问题。对我来说更正的方法是转到“项目属性/Android”并将构建目标 API 更改为不同的版本并重新发布。我会发现它已得到纠正,然后我可以将其更改回所需的构建目标。

或者

您可能需要检查您的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 *;
}
Run Code Online (Sandbox Code Playgroud)


Mr *_*r G 5

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


lak*_*man 5

这是我对错误的观察.我最近将ADT更新为22.0.1.当我导入我之前的项目"E/AndroidRuntime(24807)时,我得到以下错误 :引起:java.lang.ClassNotFoundException:com.sherl.sherlockfragmentsapp.StartActivity in loader dalvik.system.PathClassLoader [/ data/app/com. sherl.sherlockfragmentsapp-1.apk]"

然后我按以下方式更改了"属性 - > Java构建路径 - >顺序和导出"[由于论坛规则无法添加图像]

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

它解决了这个问题.希望这能帮到你们.


Upv*_*ote 2

好吧,你有一个 java.lang.ClassNotFoundException。这意味着应用程序运行时缺少一个类。您应该检查是否已将所有库添加到构建路径中。

右键单击您的项目 -> 属性 -> java 构建路径 -> 库,添加您的库或创建一个包含您的类的库,并为您的库启用顺序导出。


归档时间:

查看次数:

98825 次

最近记录:

6 年,1 月 前