Android:无法实例化应用程序

Guy*_*kes 20 java android intellij-idea

我重命名了我的包,现在我得到了这个奇怪的错误:

Unable to instantiate application
app.MyApplication: java.lang.ClassNotFoundException: 
app.MyApplication in loaderdalvik.system.PathClassLoader
Run Code Online (Sandbox Code Playgroud)

MyApplication班是Application/app.清单说:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="Application">
Run Code Online (Sandbox Code Playgroud)
<application 
    android:label="AGG"
    android:name="app.MyApplication"...
Run Code Online (Sandbox Code Playgroud)

我试过重新启动,清理内置.是在模拟器上还是在真实设备上不起作用.

地球上到底是怎么回事?

rek*_*eru 26

让我们假设,你的项目基础包真的是Application,正如你在中所说的那样manifest.

如果你的MyApplication类在这个包中(类的包声明是package Application;),那么application你的元素androidManifest.xml应该是这样的

<application android:name=".MyApplication" [...]
Run Code Online (Sandbox Code Playgroud)

如果这个MyApplication类在Application.apppackage(package Application.app;)中,那么在清单中你应该写:

<application android:name=".app.MyApplication" [...]
Run Code Online (Sandbox Code Playgroud)

如果你没有扩展android.app.Application(你没有MyApplication extends android.app.Application类),只是想为你的应用程序设置一个名称,删除它这个属性,因为它告诉编译器有一个Application应该实例化的扩展而不是默认android.app.Application.

最后,如果第一个假设是错误的,并且您已经因为任何原因更改了androidManifest manifest元素中的包声明,请将其撤消或更新您的类以包含在该包中.


Uma*_*ang 9

对我来说,问题在于即时运行.禁用它解决了这个问题.

如果我找到重新启用并使其工作的解决方案,将会更新.

  • Android Studio团队仍然没有解决此问题 (2认同)

小智 6

就我而言,它抛出:

Caused by: java.lang.IllegalAccessException: java.lang.Class<foo.bar.MyApp> is not accessible from java.lang.Class<android.app.AppComponentFactory>
Run Code Online (Sandbox Code Playgroud)

原因是Application 类必须使用修饰符声明public,例如这样做:

public class MyApp extends Application {
}
Run Code Online (Sandbox Code Playgroud)

代替:

class MyApp extends Application {
}
Run Code Online (Sandbox Code Playgroud)