Android类未找到异常:在路径上找不到类

50

我找不到这个错误的解决方案。您能给出永久性的解决方案吗?我不知道怎么解决它。

01-04 11:06:42.302: E/AndroidRuntime(1906): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{e.gochat/e.gochat.gochat.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "e.gochat.gochat.MainActivity" on path: DexPathList[[zip file "/data/app/e.gochat-1.apk"],nativeLibraryDirectories=[/data/app-lib/e.gochat-1, /vendor/lib, /system/lib]]
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2102)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread.access$700(ActivityThread.java:135)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.os.Looper.loop(Looper.java:137)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread.main(ActivityThread.java:4998)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at java.lang.reflect.Method.invokeNative(Native Method)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at java.lang.reflect.Method.invoke(Method.java:515)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at dalvik.system.NativeStart.main(Native Method)
01-04 11:06:42.302: E/AndroidRuntime(1906): Caused by: java.lang.ClassNotFoundException: Didn't find class "e.gochat.gochat.MainActivity" on path: DexPathList[[zip file "/data/app/e.gochat-1.apk"],nativeLibraryDirectories=[/data/app-lib/e.gochat-1, /vendor/lib, /system/lib]]
01-04 11:06:42.302: E/AndroidRuntime(1906):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
01-04 11:06:42.302: E/AndroidRuntime(1906):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
01-04 11:06:42.302: E/AndroidRuntime(1906):     ... 11 more
01-04 11:07:06.772: I/Process(1906): Sending signal. PID: 1906 SIG: 9
 

这是我的应用程序清单XML
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="e.gochat"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="18" />
<permission
    android:name="e.gochat.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="e.gochat.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
 
<application
    android:name="e.gochat.Common"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
   
    
    <activity
        android:name="e.gochat.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <activity android:name="e.gochat.ChatActivity" 
        />
    <activity
        android:name="e.gochat.SettingsActivity"
        android:label="@string/title_activity_settings" />
    <receiver
        android:name="e.gochat.client.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="e.gochat" />
        </intent-filter>
    </receiver>
    <provider
        android:name="e.gochat.DataProvider"
        android:authorities="e.gochat.provider" 
        android:exported="false">
    </provider>
   
    
</application>

4
你在某个地方使用了 e.gochat.gochat.MainActivity,但是在 AndroidManifest.xml 中声明的名称为 e.gochat.MainActivity。请注意调整这些名称以保持一致。 - Rohan Kandwal
我遇到了同样的问题,并用这个解决方案解决了它: https://dev59.com/X2Qn5IYBdhLWcg3wvZR_#23577697 - manutudescends
13个回答

35

我不确定你的包名是什么,但如果是 e.gochat,请执行以下操作。

package="e.gochat" 添加到 manifest.xml 文件中。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="e.gochat"
    .....
    .....
         >

在每个android:name的活动声明中,在活动名之前加上一个点:

<activity
    android:name=".MainActivity">
............
</activity>

<activity 
    android:name=".ChatActivity">

编辑

在您的编辑后,我可以看到e.gochat是您的包名。
现在您只需要按照我在答案第二部分中提到的那样,从每个活动/提供者/接收器名称中移除e.gochat
Android会为您添加它。


1
为什么在 Activity 名称前必须使用点符号?为什么不能提供 Activity 名称的完整包路径? - IgorGanapolsky
@IgorGanapolsky 如果没有使用 package="e.gochat"(被删除),您可以提供完整路径。 - ramaral
1
亲们, 我也遇到了同样的问题,跟 ramaral 提到的一样更改了包名,但是直到我清理项目、重新生成项目并运行后才解决,现在它正常工作了。 - Hazim

35

我通过禁用Android Studio的即时运行选项解决了这个问题。 禁用即时运行,请前往 文件 -> 设置 -> 构建、执行、部署 -> 即时运行 -> 取消勾选即时运行的复选框


我想更改一个项目的名称。在关闭Android Studio之后,在文件浏览器中重命名整个项目,然后以所需的名称重新导入到Android Studio中,它开始出现原始问题中提到的问题。您的答案只是有所帮助。 - CodeToLife
@CodeToLife 我也有同样的问题 - 我认为很多人会搜索解决方案并进入这个页面。希望他们能看到这个答案... - nikib3ro
你救了我的命,非常感谢。 - blkrt
我认为Android Studio存在严重的bug,该项目在API 17上运行良好,但当我尝试在24上进行调试时,它会抛出异常。即使通过其他方式(例如蓝牙)传输应用程序,在24上应用程序也能正常工作。无论如何,感谢您挽救了我的生命。 - Pranoy Sarkar
这对我有用!但我不知道原因是什么?! - Ali Soleimani

13

使用Android Studio

在升级到Android Studio 0.8.2后,我遇到了这个问题。我尝试了很多方法,包括:

  • 清理项目
  • 清理项目(gradle clean)
  • 无效的缓存并重新启动
  • 在AndroidManifest.xml中取消限定Activity名称(.MyActivity)

直到我重新导入整个项目,这些方法都没有起作用。

文件 -> 关闭项目 -> 导入项目... -> 选择同一个项目 -> 确定

这个方法对我有效。


12

在设备上卸载应用并重新运行项目解决了我的问题。


卸载应用程序然后重新运行对我有用。谢谢。我在很长一段时间没有更新Android Studio(几周),然后遇到了这个问题。截至本帖发布时,我现在正在运行此版本-> Android Studio 2.2 Build # AI-145.3276617,构建于2016年9月15日 JRE:1.8.0_76-release-b03 x86_64 JVM:由JetBrains s.r.o提供的OpenJDK 64位服务器VM - BenJaminSila

9
这个问题影响我是因为布局文件中的路径名不正确。
<android.support.v4.app.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"> 

</android.support.v4.app.view.ViewPager>

ViewPager的正确绝对路径为:
android.support.v4.view.ViewPager

路径纠正后它就可以工作了。我不需要在活动名称前加'.'。


1
你救了我的一天,这发生在我的项目中,特别是在com.neopixl.pixlui.MainActivity包中。非常感谢。 - Ahmed Salem

9
对我而言,在运行 Android 5.0 以下版本的设备上出现这个问题,是因为我没有启用多 dex 支持(即包括库在内的总方法数超过 65k)。多 dex 在 Android 5.0+ 上是自动且本地化的(具体来说,是使用ART 的设备)。

7
问题已经通过从build.gradle文件中移除MultiDexSupport来解决:
defaultConfig {
    multiDexEnabled true    // This line was causing above problem
}

移除MultiDexSupport解决了该问题。


4
好的,加入这行代码解决了我的错误,谢谢 :) 有什么解释吗? - DAVIDBALAS1
1
Android平台对引用方法的大小设置了64K的限制,为了避免这种情况,我们可以启用multi-dex支持。因此,我启用了multiDex支持,我的未找到的类被正确编译到classes.dex中,问题得到了解决。 - Kushal

5
这个问题有多个答案,因为不同的情况会有不同的解决方法。在我的Android Studio项目中,我使用一个库(.aar)时遇到了同样的错误。
在我的情况下,根本原因是我忘记在应用程序的build.gradle文件中添加一个第三方库依赖项,而该库被.aar文件使用。
例如:该库(.aar)使用'com.squareup.okhttp3:okhttp:3.4.1'。所以我需要在应用程序的build.gradle中添加
compile 'com.squareup.okhttp3:okhttp:3.4.1'
希望对某些人有所帮助。

3
对我来说,问题出现在我没有在:app模块的build.gradle中包含kotlin-androidkotlin-android-extensions插件。

例如:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

如果您正在使用Kotlin DSL

plugins {
    id("com.android.application")
    kotlin("android")
    kotlin("android.extensions")
}

这是我的问题。我使用Android Studio将我的主活动转换为Kotlin,但从未收到任何警告或提示来按照此处描述的方式进行配置:https://developer.android.com/kotlin/add-kotlin使用Help -> Find Action,我获得了Configure Kotlin对话框,并自动为我编辑了gradle文件。 - Joshua

2
ANDROID STUDIO 除了Kishor的回答之外:

当我在gradle defaultconfig中启用multiDexEnabled = true时,我的小项目发生了错误。使用生成的.apk文件启动应用程序时会崩溃,并显示已知的错误消息。

对我而言,问题得到解决是通过gradle构建.apk文件(在Android Studio右侧)->“yourapp”->任务->安装->installDebug

希望这可以帮助遇到这个奇怪错误的人。


我有同样的问题。 - Francesco

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