java.lang.RuntimeException: 无法实例化活动ComponentInfo{...}:java.lang.ClassNotFoundException:未找到类

9

我正在使用Fused Location Provider开发一个应用程序。但是在尝试运行程序时,遇到了错误消息“很抱歉,应用程序名称已停止运行”。虽然Eclipse没有显示任何错误,但是在logcat中出现了错误。我不知道该如何修复它们。我从这里下载了源代码,请帮助我理解我做错了什么?

LogCat

11-05 08:31:41.641: E/AndroidRuntime(795): FATAL EXCEPTION: main
11-05 08:31:41.641: E/AndroidRuntime(795): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.kpbird.fusedlocation/com.kpbird.fusedlocation.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.kpbird.fusedlocation.MainActivity" on path: DexPathList[[zip file "/data/app/com.kpbird.fusedlocation-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.kpbird.fusedlocation-1, /system/lib]]
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.os.Looper.loop(Looper.java:137)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread.main(ActivityThread.java:5103)
11-05 08:31:41.641: E/AndroidRuntime(795):  at java.lang.reflect.Method.invokeNative(Native Method)
11-05 08:31:41.641: E/AndroidRuntime(795):  at java.lang.reflect.Method.invoke(Method.java:525)
11-05 08:31:41.641: E/AndroidRuntime(795):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-05 08:31:41.641: E/AndroidRuntime(795):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-05 08:31:41.641: E/AndroidRuntime(795):  at dalvik.system.NativeStart.main(Native Method)
11-05 08:31:41.641: E/AndroidRuntime(795): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.kpbird.fusedlocation.MainActivity" on path: DexPathList[[zip file "/data/app/com.kpbird.fusedlocation-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.kpbird.fusedlocation-1, /system/lib]]
11-05 08:31:41.641: E/AndroidRuntime(795):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
11-05 08:31:41.641: E/AndroidRuntime(795):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
11-05 08:31:41.641: E/AndroidRuntime(795):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
11-05 08:31:41.641: E/AndroidRuntime(795):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
11-05 08:31:41.641: E/AndroidRuntime(795):  ... 11 more

请发布您的 AndroidManifest.xml。 - Jorgesys
7个回答

8

在我的情况下,问题出在了Gradle上。

我将代码从Java重构为Kotlin,但忘记在Gradle中添加这个。

apply plugin: 'kotlin-android'

1
谢谢!如果你和我一样在使用 Gradle 的 .kts 文件,那么请在你的应用级别的 Gradle 文件中添加 plugins { id("kotlin-android") } - Courlu

7

由于您的异常是:

ClassNotFoundException: Didn't find class "com.kpbird.fusedlocation.MainActivity"

在你的 AndroidManifest.xml 文件中添加完整的包名,这是你的活动所在的位置:

<activity
                android:name="com.kpbird.fusedlocation.MainActivity"

或者要确保定义了正确的包名:

package="com.kpbird.fusedlocation"

我认为你在代码的某个地方错误地键入了你应用程序的软件包!

enter image description here


我尝试了这个,但它仍然不起作用。我正在开发一个项目来确定紧急呼叫中人员的位置。因此对我来说非常重要。您能否在您的计算机上尝试此源代码以了解问题? - Uğur
是的,我现在在我的Eclipse中了,我只需要添加Google Play服务库的引用:|,我认为你在代码某个地方打错了包名!:( - Jorgesys
1
谢谢你的帮助 :)。我正在重新检查我的代码,希望能找到问题。 - Uğur
不用谢,我觉得重新下载和导入项目会更好/更快 =)。 - Jorgesys

1

我曾经将一个应用程序从一个目录移动到另一个目录,这就发生了这种情况。如果@Jorgesys's solution无法解决问题,请考虑重命名模块并清理项目。注意:我使用的是Android Studio。


0
这个错误发生在你在清单文件中更改了包名,但没有在主活动中更改。 记住,当你改变包名时,要在以下地方进行更改: 1. 清单文件 如果你正在构建Flutter项目,则需要在所有三种模式(profile、debug和release)中进行更改。 2. 主活动的Kotlin或Java文件
3. 在构建gradle中更改应用程序ID。

0
在更新我的 MainActivity.java 文件时,我不小心将包名从 package com.ppg; 改成了 package com.PPG; (大小写错误)。当我改回小写后,它开始正常工作。

0

AndroidManifest中包含引用时会出现相同的问题:

  <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

并且硬编码了错误的google_play_services_version值。


-6

在花费了很多时间解决这个问题后,我终于找到了解决方案。

只需从类的构造函数中删除setContentView(R.layout.LAYOUT_NAME);并将其放入类的onCreate方法中即可。

100%的问题会得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接