Android ClassNotFoundException:没有在路径上找到类

时间:2013-10-22 16:17:07

标签: java android eclipse

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

我不确定是什么导致它,因为它在清单中正确列出:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gvg.simid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我还添加了“Android Private Libraries”来构建路径,并将其移至“Order and Export”的顶部,但它仍然给了我同样的错误。

编辑:我完全重建了项目,无法重现错误。不确定是什么导致它。

36 个答案:

答案 0 :(得分:72)

我的项目遇到了同样的问题。这是因为我的项目和我在项目中添加的库项目之间的android支持库版本冲突。 将相同版本的android支持库放在您包含的项目和库项目中并清理构建 ......一切都会有效......

答案 1 :(得分:32)

以下方法对我有用。 右键点击project,然后选择properties。将打开“属性”面板。从左侧菜单转到Java Build Path - &gt; Order and Export。 从下面的列表中取消选中"Android Dependencies"旁边的框。 最后clean your project并运行。

希望它有效

答案 2 :(得分:13)

对于那些在Android Studio上遇到此问题的人,我在合并后遇到了同样的问题,由于某些原因,它甚至在cleaninvalidate cash/restart操作后仍然存在,这让我发疯。

原来,可以通过从命令行运行一次gradle build来修复它。只需在项目目录中运行以下命令:

./gradlew assemble clean
./gradlew assemble

我希望能节省一些我必须经历的浪费和挫折的时间。

答案 3 :(得分:9)

如果您正在使用Eclipse,请尝试Project - &gt;清洁

答案 4 :(得分:8)

我有同样的问题,这对我有用

1)主要活动的完整路径代替相对路径。

2)删除'build'文件夹并清理项目。

答案 5 :(得分:7)

如果我们更改APP的构建路径,则会发生这种情况,这可以是添加或删除或更改库或.jar文件的任何情况。最佳解决方案是重新启动Eclipse。

答案 6 :(得分:6)

对于任何拥有multidex enable的人来说,写这个

build.gradle

apply plugin: 'com.android.application'

android {
 defaultConfig {
      multiDexEnabled true
  }
 dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:multidex:1.0.1'
}

写一个类EnableMultiDex,如下所示

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }
}

并在AndroidManifest.xml中将此 className 写入Application标记

 <application
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">

答案 7 :(得分:6)

如果在Android Studio 2.0及更高版本中使用新的即时运行功能时出现此错误,则这是他们身上的某种错误。
要修复这个问题,您必须在设备/模拟器上手动停止您的应用,如果它没有停止,那么从Android Studio中选择 Build 重建项目< / KBD>。
然后点击运行按钮或 SHIFT + F10

答案 8 :(得分:4)

在我的情况下,这是一个程序缩小过程,从我的制作apk中删除了一些重要的类。

解决方案是编辑proguard-rules.pro文件并添加以下内容:

-keep class com.someimportant3rdpartypackage.** { *; }

答案 9 :(得分:4)

如果你在Android 4.4 之前使用 Multidex ,那么你的问题可能是你的活动类位于第二个dex文件中,因此android系统找不到它。

要将活动类保留在主dex文件中,请参阅此页:

https://developer.android.com/studio/build/multidex.html#keep

要查找dex文件中的哪些类使用Android Studio

只需将您的apk拖放到Android Studio即可。您应该能够在apk资源管理器中看到您的dex文件。

然后选择dex文件以查看其中的类。

另一种选择是dexdump:

您可以使用 dexdump 命令检查apk中包含的dex文件的内容,该命令可以在

中找到
  

Android的SDK /构建工具/ 27.0.3 / dexdump

对于Windows用户,请参阅此tool我做的是为了简化流程

答案 10 :(得分:3)

信不信由你...我在stackoverflow上尝试了几乎我在这里找到的每个答案。在我重新启动机器之前,没有什么能帮上忙。我的Android Studio适用于Ubuntu 16.04 LTS。

答案 11 :(得分:3)

1)在项目根目录下创建libs文件夹 2)将jar文件复制并粘贴到其中 3)配置构建路径(添加jar)
4)清洁并运行

欢呼: - )

答案 12 :(得分:2)

我遇到了同样的问题,我注意到示例代码放在目录“java”而不是目录“src”下。 将代码移动到src后,问题就解决了。

还要确保将app目录拆分为多个文件夹。 例如/main/com/site/appname/不是/main/com.site.appname/

希望它有用〜

答案 13 :(得分:2)

当我定义了一个扩展视图但在布局文件中使用错误名称引用此自定义视图的类时,我遇到了此错误。我没有<com.example.customview/>,而是将<com.customview/>包含在XML布局文件中。

答案 14 :(得分:1)

从版本18升级后出现此问题。 升级后,我有以下内容: Project Build Target为5.01,targetSDKVersion = 21

<强>可是: 构建工具仍然来自Android 4.3.1(18) 我注意到那些从ActionBarActivity派生活动的应用程序因上述错误而崩溃了那些仍未运行的应用程序。

所以简单的解决方法是使用最新的 Android SDK Build Tools 21.1.2 而不仅仅是Android SDK Build Tools 18的那些,这似乎是默认的。

所以罪魁祸首似乎是Appcompat库,我将其用于Actionbar向后兼容性。

顺便说一句 :使用我必须设置/修复的appcompat库: $SDKInstallDIR$\Android\android-sdk\extras\android\support\v7\appcompat\project.properties target=android-21(在其他一些有用的帖子中被推荐,默认值为19))

答案 15 :(得分:1)

如果您将新的Library Project作为模块添加到Android项目中,并且您正在库中使用Kotlin,请不要忘记添加

apply plugin: 'kotlin-android'

在模块的gradle文件顶部。创建新模块时,Android Studio不会添加此行,这可能会像我一样浪费您的时间。

答案 16 :(得分:1)

此处提到的解决方案 - &gt; Multidex Issue solution为我工作。以下是需要添加到应用程序上下文的内容:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

答案 17 :(得分:1)

我遇到了同样的问题并通过以下方式解决了这个问题:

从构建菜单中选择

1-清洁项目。

2-构建APK。

答案 18 :(得分:1)

我最近遇到过这个问题而且我使用的是Android Studio 0.8.4

问题在于我决定重命名一个名为main.xml的XML菜单布局文件。

右键单击它并选择重构 - &gt;重命名即可。在重命名之前,请务必取消选中 &#34;在评论和字符串中搜索&#34; ,然后按重构

由于我的文件最初名为&#39; main&#39; ,因此它重命名了app.iml和build.gradle中的关键路径,主要是build.gradle中的java.srcDirs,因为路径定义为'src/main/java'

我希望这有助于任何可能遇到此问题的人。

答案 19 :(得分:1)

我在Windows上遇到了同样的问题。我已将项目的路径重命名为包含空格的内容。

确保项目的路径不包含空格。

答案 20 :(得分:0)

我今天遇到同样的问题。并尝试了上述所有已给出的解决方案,但对我没有任何帮助。然后我花了一段时间,找出了原因。我认为这也可以节省其他一些开发人员在我这里共享的时间。问题出在包名错误。我当时使用的是MVP架构,但我的活动仍保存在 view 包中。然后我从另一个项目复制了Main类。这就是陷阱。在xml中,Main Activity引用的只是外部的其他Package。该软件包不包括我的视图目录(MVP层次结构级别)。然后我也检查了清单。我在那里也发现了同样的问题。因此,我提供了活动的完整路径(程序包名称)(直到MVP的视图目录/程序包保存了我所有的活动)。这解决了我的问题。希望对别人也有帮助。

答案 21 :(得分:0)

我遇到了同样的问题,经过大量的工作和搜索,我找到了解决方案:我只是清理了项目,然后构建了apk。 -生成->清理项目 -建立->建立APK 我希望它是有用的.....

答案 22 :(得分:0)

java.lang.RuntimeException:无法实例化应用程序com.android.tools.fd.runtime.BootstrapApplication:java.lang.ClassNotFoundException:未找到类“com.android.tools.fd.runtime.BootstrapApplication”路径:/data/app.apk(in android 4.3,4.1)

无法实例化应用程序com.android.tools.fd.runtime.BootstrapApplication:java.lang.ClassNotFoundException:com.android.tools.fd.runtime.BootstrapApplication(在下面的棒棒糖iam面临着像这样的错误)

要禁用即时运行,它将正常工作,请按照以下步骤禁用即时运行 在android工作室 1.转到文件设置 - &gt;构建,执行,部署 - &gt;即时运行---&gt;取消选中“启用即时运行”

答案 23 :(得分:0)

我在Android 4 Phone上也遇到了类似的问题,但适用于高于此的版本。由于之前的某些原因,我在gradle脚本中添加了“ multidexEnabled = true”行。现在我删除了这一行,它适用于两个版本(Android 4及更高版本)。但是我不明白为什么要添加该行以及它现在如何工作。

答案 24 :(得分:0)

我遇到了同样的问题。我通过首先删除android项目文件夹中的build文件夹和app文件夹中的build文件夹来解决它。 然后清理你的项目和构建。

答案 25 :(得分:0)

我也遇到了同样的问题, 我们可以通过做一些像

这样的事来解决这个问题

1-卸载应用程序。

2-重建项目。

3-清理项目。

4-从文件中失效并重新启动项目 - &gt;无效并重新启动。

答案 26 :(得分:0)

我曾多次遇到这个问题,而且我常常没有做出依赖性明显错误的事情。

检查这是否“未找到”是一个好主意。 class出现在最后的apk中。如果是,就像在我的情况下发生的那样,问题通常是:

并不是找不到给定的类,但是由于缺少超类而无法加载它。

检查您扩展的类是否可用,然后尝试相应地修复构建脚本或依赖项。

答案 27 :(得分:0)

当我尝试使用 API 23 在设备中进行调试时,我在 Android Studio 中发现此错误,因此我检查了Android Studio,我注意到 i没有安装这个API 23版本。安装完成后,我解决了这个问题。

答案 28 :(得分:0)

我有这个问题,由几个原因引发,但我在你的堆栈跟踪“**Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**”中看到了这个问题,我发现.classpath在它停止工作之前存在差异。

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

我添加了这一行:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

这是最终版本:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

现在它有效! =)

答案 29 :(得分:0)

我刚刚重启设备并运行了应用。它没有任何问题。希望这有助于某人:)

答案 30 :(得分:0)

在我们的例子中,我们想编译Vagrant版本并且有相同的错误。我们在Build菜单

中按clean projectrebuild project修复了它

答案 31 :(得分:0)

以防任何人面临与我相同的问题并且没有建议 回答这里有帮助。

对我而言,原因是,Android工作室重构是错误的。 我在一个类之外移动了一个内部类,这是一个View,因此 还有一个xml,其中设置了直接路径。这条路不会得到 由工作室重构!并且不会抛出任何错误。

希望这有助于任何人。欢呼声。

答案 32 :(得分:0)

我有同样的问题。我正在使用Xamarin.Android。

我的问题是我更改了versionCode和versionName。

当我将它们设置为这样时我没有问题:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

当我将其更改为此版本(versionCode 2和versionName 0.0.1)时出现问题:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

我通过更改为versionCode 2和versionName 1.0.0.1解决了这个问题,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

我不确定为什么这是一个问题,也许Android不喜欢版本较高的较低版本名称?

我在http://developer.android.com/guide/topics/manifest/manifest-element.html#vname

上找到了以下内容
  

机器人:的versionCode   内部版本号。此数字仅用于确定一个版本是否比另一个版本更新,更高的数字表示更新的版本。这不是向用户显示的版本号;该号码由versionName属性设置。   该值必须设置为整数,例如“100”。您可以根据需要定义它,只要每个连续版本具有更高的数字即可。例如,它可以是内部版本号。或者,您可以通过在低16位和高16位分别编码“x”和“y”将“x.y”格式的版本号转换为整数。或者,每次发布新版本时,您只需将数字增加一个。

     

机器人:的versionName   显示给用户的版本号。此属性可以设置为原始字符串或字符串资源的引用。该字符串没有其他目的,只能显示给用户。 versionCode属性保存内部使用的重要版本号。

答案 33 :(得分:0)

我有这个问题很长一段时间了,和其他人一样,上面的答案并不适用于我的项目。

在我的项目中,我将项目链接到了我的项目,并且每次执行其他项目的某些代码时都会抛出ClassDefNotFoundError。

所以这是我的解决方案。我去了项目的项目属性和Java Build Path。按下&#34;来源&#34; -tab和&#34;链接来源&#34;从另一个项目的src-folder到我自己的项目,并命名为一个新文件夹&#34; core-src&#34;。

希望此解决方案可以帮助某人

答案 34 :(得分:0)

我有同样的问题。正如@weiweia建议的那样,将代码从java目录移到src为我工作。我还从Project中移除了Android Dependencies - &gt;属性 - &gt; Java构建路径 - &gt;订购和导出,并确保仅在Android屏幕中包含库项目。

答案 35 :(得分:-1)

我在IntelliJ IDEA中遇到过这个问题。这就是我解决它的方法:

项目属性&gt;方面&gt;点击您要添加的外部库创建的Android Facet&gt;选中“图书馆模块”框。

相关问题