我重新命名了我的包,现在我收到了这个奇怪的错误:
Unable to instantiate application
app.MyApplication: java.lang.ClassNotFoundException:
app.MyApplication in loaderdalvik.system.PathClassLoader
MyApplication
班级位于Application/app
。清单说:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="Application">
<application
android:label="AGG"
android:name="app.MyApplication"...
我试过重新启动,清理内置。是在模拟器上还是在真实设备上不起作用。
地球上发生了什么?
答案 0 :(得分:25)
我们假设您的项目基础包真的是Application
,正如您在manifest
中所说的那样。
如果您的MyApplication
类在此包中(该类的包声明为package Application;
),那么application
中的androidManifest.xml
元素应该如下所示
<application android:name=".MyApplication" [...]
如果这个MyApplication
类在Application.app
包(package Application.app;
)内,那么在清单中你应该写:
<application android:name=".app.MyApplication" [...]
如果你没有扩展android.app.Application
(你没有MyApplication extends android.app.Application
类),只是想为你的应用程序设置一个名称,删除它的属性,因为它说的是编译器,应该实例化Application
扩展名,而不是默认的android.app.Application
。
最后,如果第一个假设是错误的,并且您在androidManifest的manifest
元素中因为任何原因更改了包声明,请将其撤消或更新您的类以包含在该包中。
答案 1 :(得分:9)
对我来说,问题在于即时运行。禁用它解决了这个问题。
如果我找到重新启用并使其正常工作的解决方案,则会更新。
答案 2 :(得分:3)
这个答案帮助了我,如果你使用SDK 17+,基本上将你的lib重命名为libs https://stackoverflow.com/a/10176048/46459
答案 3 :(得分:2)
就我而言,我已将JAVA编译器合规性级别从1.7更改为1.6,问题已解决。
答案 4 :(得分:1)
确保清单中的所有引用都已更新,以反映您的新包名称。
答案 5 :(得分:1)
package="Application"
应package="MyApplication"
吗?
答案 6 :(得分:1)
您需要更正android:name
属性。 ClassNotFoundException after changing app's name in Android
答案 7 :(得分:0)
删除这些行对我有用:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
更新:
此问题背后的原因是我尚未在PC上安装JAVA 8
答案 8 :(得分:0)
我一天都遇到了这个问题,终于解决了,我在Application类声明中犯了一个错误,您需要像这样将您的应用程序类设置为public:
公共类AppController扩展了Application { }
我的代码有误: AppController类扩展了Application { }
答案 9 :(得分:0)
对我来说,问题是由于班级的访问级别而定,必须是公开的
答案 10 :(得分:-1)
简单清理项目并重建。