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

Phi*_*ito 93 java eclipse android

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
Run Code Online (Sandbox Code Playgroud)

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

<?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>
Run Code Online (Sandbox Code Playgroud)

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

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

Bal*_*kar 74

我的项目也有同样的问题.这是因为我的项目和我在项目中添加的库项目之间的android支持库版本冲突.将相同版本的android支持库放在你包含的项目和库项目中,并清理构建 ......一切都会工作......

  • 谢啦!!!我确信我已经完成了它,但我检查了,版本不同!非常感谢! (3认同)
  • 我评论这个是为了记住下次“更新”sdk,看这个答案 (2认同)

Chr*_*ris 32

以下方法对我有用.右键单击您的project并选择properties.将打开"属性"面板.从左边的菜单转到Java Build Path- > Order and Export.从下面的列表中取消选中旁边的框"Android Dependencies".最后clean your project跑了.

希望它有效

  • 这对我有用."Android Dependencies"的含义是什么?为什么它在这种特殊情况下有所帮助? (8认同)
  • 是eclipse的这些说明吗?我无法按照android studio的这些说明操作.什么是我的'项目'?那是什么意思? (6认同)
  • 此链接包含Android Studio的步骤http://stackoverflow.com/questions/18533054/java-lang-runtimeexception-unable-to-instantiate-activity-componentinfo-java (2认同)

Ima*_*ari 13

对于那些在Android Studio上遇到此问题的人来说,我在合并后遇到了同样的问题,并且出于某种原因,它甚至在操作之后仍然存在clean,invalidate cash/restart这让我发疯.

事实证明,它可以通过从命令行运行一次gradle build来修复.只需在项目目录中运行以下命令:

./gradlew assemble clean
./gradlew assemble
Run Code Online (Sandbox Code Playgroud)

我希望它可以节省一些我必须经历的浪费和挫折的时间.


sav*_*ion 10

如果你Library Project在你的 Android 项目中添加了一个新的模块并且你Kotlin在你的库中使用,不要忘记添加

apply plugin: 'kotlin-android'
Run Code Online (Sandbox Code Playgroud)

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

编辑:过了一段时间,我再次遇到这个问题,这次我忘记添加我的模块作为项目的依赖项。:)


Dan*_*lva 9

如果您正在使用Eclipse,请尝试Project - > Clean


小智 9

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

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

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


pio*_*wna 7

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


vov*_*ost 6

如果您在Android Studio 2.0及更高版本中使用新的即时运行功能时出现此错误,那么这是他们身上的某种错误.
要解决此问题,您必须在设备/模拟器上手动停止您的应用,如果它没有停止,那么从Android Studio选择BuildRebuild Project.
然后单击" 运行"按钮或SHIFT + F10


Man*_*ddy 6

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

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'
}
Run Code Online (Sandbox Code Playgroud)

写一个类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();

    }
}
Run Code Online (Sandbox Code Playgroud)

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

 <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">
Run Code Online (Sandbox Code Playgroud)

  • 重点是从"MultiDexApplication"类而不是"Application"扩展应用程序. (2认同)

Ben*_*shi 5

如果您在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 / build-tools / 27.0.3 / dexdump

对于Windows用户,请参阅我为简化此过程而制作的此工具


BeF*_*ree 5

就我而言,是 proguard 缩小过程从我的生产 apk 中删除了一些重要的类。

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

-keep class com.someimportant3rdpartypackage.** { *; }
Run Code Online (Sandbox Code Playgroud)