12

我忙于我的应用程序一个多星期,突然:

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

这是我的 AndroidManifest.xml:

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

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="nl.test.myapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".welcomewizard.WelcomeWizardIntroPage"
            android:label="@string/app_name" />

        <activity android:name=".welcomewizard.WelcomeWizardPage1"
            android:label="@string/app_name" />

        <activity android:name=".welcomewizard.WelcomeWizardPage2"
            android:label="@string/app_name" />

        <activity android:name=".welcomewizard.WelcomeWizardPage3"
            android:label="@string/app_name" />

        <activity android:name=".welcomewizard.WelcomeWizardPage4"
            android:label="@string/app_name" />

        <activity android:name=".welcomewizard.WelcomeWizardFinishPage"
            android:label="@string/app_name" />

        <activity android:name=".CompanySelectorActivity"
            android:label="@string/compsel_actionbarlabel" />
    </application>

</manifest>

这是在我的 R.java 出现一些问题之后发生的(视图的 id 不正确),在重建项目后发生了这个问题

我已经在 IDE 文件菜单中尝试过 Invalidate Cashes/restart

更新 14:51:这是我的 compiler.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <option name="DEFAULT_COMPILER" value="Javac" />
    <resourceExtensions />
    <wildcardResourcePatterns>
      <entry name="!?*.java" />
      <entry name="!?*.form" />
      <entry name="!?*.class" />
      <entry name="!?*.groovy" />
      <entry name="!?*.scala" />
      <entry name="!?*.flex" />
      <entry name="!?*.kt" />
      <entry name="!?*.clj" />
    </wildcardResourcePatterns>
    <annotationProcessing>
      <profile default="true" name="Default" enabled="false">
        <processorPath useClasspath="true" />
      </profile>
    </annotationProcessing>
  </component>
</project>

我的 MainActivity.java 文件(\src\main\java\nl\test\myapp\MainActivity.java):

package nl.test.myapp;

import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.widget.RelativeLayout;

import nl.test.myapp.welcomewizard.WelcomeWizardIntroPage;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setBackground(R.drawable.background_grey);

        Intent intent = new Intent(this, WelcomeWizardIntroPage.class);
        startActivity(intent);
        finish();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setBackground(int drawable){
        int currentApiVersion = android.os.Build.VERSION.SDK_INT;
        if(currentApiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN){
            RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_main);
            layout.setBackground(getResources().getDrawable(drawable));
        }
    }
}
4

18 回答 18

9

关闭安卓工作室。导航到项目文件夹。删除所有与 intelliJ (Android Studio) 相关的文件,即

  • .idea(文件夹)
  • *.imi(文件)

还要确保包名称与 android manifest.xml 中的包匹配。

然后重新导入项目。

这发生在我身上,因为我重命名了根包,而 IntelliJ (android studio) 没有跟踪这个。

于 2015-04-23T10:53:51.310 回答
5

我在 Android Studio 中创建了一个新项目,并将旧项目中的所有内容复制到新项目中。现在它再次工作,无需对代码进行任何(!)修改。

于 2013-11-13T09:11:45.547 回答
2

我遇到了这个。我的应用程序一直运行良好,但有一天它刚刚开始遇到这些 ClassNotFoundExceptions。我的代码根本没有改变。

据我所知,它最终成为 Android Studio 构建中的一个错误。我最近更新到金丝雀频道的最新版本。

切换回开发频道上的旧版本让事情再次正常工作:

  1. 进入设置/外观和行为/系统设置/更新
  2. 更改为 Dev Channel 并立即检查。
于 2014-04-25T23:06:59.377 回答
2

我有同样的问题,结果我搞砸了一些最终方法。请务必在 FATAL EXCEPTION之前dalvikvm检查logcat 输出中的错误。我会给你一些关于这个问题的提示。就我而言,我有一个已经在基类中定义的最终方法 () - 导致运行时崩溃。在编译时没有抱怨。isResumed

检查日志:

E/dalvikvm( 9984): Method Lcom/your/package/ui/SomeActivity;.isResumed overrides final Landroid/app/Activity;.isResumed
W/dalvikvm( 9984): failed creating vtable
...
D/AndroidRuntime( 9962): Shutting down VM
...
E/AndroidRuntime(10065): FATAL EXCEPTION: main
E/AndroidRuntime(10065): Process: com.yourpackage.ui, PID: 10065
E/AndroidRuntime(10065): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.yourpackage.ui/com.yourpackage.ui.HomeActivity}: java.lang.ClassNotFoundException: Didn't find class "com.yourpackage.ui.HomeActivity" on path: DexPathList[[zip file "/data/app/com.yourpackage.ui-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.yourpackage.ui-2, /vendor/lib, /system/lib]]
...
于 2014-01-12T20:40:21.507 回答
1

您可以检查 Multidex 机制。原因可能是方法号溢出。

  1. 添加 MultiDex.install(this); 到您的应用程序:

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

    afterEvaluate {
       tasks.matching {
           it.name.startsWith('dex')
       }.each { dx ->
           if (dx.additionalParameters == null) {
               dx.additionalParameters = []
           }
           dx.additionalParameters += '--multi-dex' // enable multidex
       }
    }
    

到您的应用模块的 gradle.build

于 2016-06-20T09:15:52.393 回答
1

这也发生在我身上,这里的帖子都没有帮助。我的问题也是由于我重命名了根包引起的。我的 ClassNotFoundException 显示了一个 DexPathList,它是我的包的旧路径。我发现原因是在我的名为“build.gradle (Module: app)”的 Gradle 脚本中,我有一行说:applicationId“旧包名”。我将其更改为新的包名称,进行了 gradle 同步,一切正常。

于 2017-07-31T19:16:41.220 回答
1

我有类似的问题。我记得,之前显示“内存不足”消息,应用程序上传过程无法完成,在 dexDebug 上停止并出现错误。然后我释放了足够的内存,但应用程序以 ClassNotFoundException 启动。
对我有用的解决方案是删除项目中的所有“构建”文件夹。我想当内存不足时,gradle 可以将损坏的文件放入“build”文件夹。

于 2016-01-27T04:56:25.110 回答
0

您的 MainActivity.java 被排除在编译之外,因此此类不包含在 .apk 中。删除行:

<file url="file://$PROJECT_DIR$/src/nl/test/MyApp.java" />

从 .idea/compiler.xml 文件的 excludeFromCompile 部分(或者您可以从 IDE 设置中执行此操作)。

资源

于 2013-11-12T13:45:57.277 回答
0

我不知道这会对你有所帮助..无论如何尝试使用应用程序主题作为@style/Theme.AppCompat..我们必须按照开发者论坛使用。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat" >

       <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
于 2013-11-12T13:24:57.190 回答
0
   try: 
   <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
于 2013-11-12T13:25:45.457 回答
0

正如我在您的日志中看到的,

nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib

为此,您可以将您的更改liblibs,我这样做了,它解决了我的问题。

您会在项目上看到一些错误标记,以解决转到项目属性和 java 构建路径,从那里删除所有库。您将不会再看到此错误。:)

于 2014-05-05T12:01:59.030 回答
0

看起来你在某处有一个命名空间错字。搜索MyApp并将其更改为myapp.

于 2013-11-12T13:38:02.853 回答
0

如果您正在创建一个 android 库,您可能只是忘记在您的应用程序 build.gradle 中使用以下implementation project关键字导入您的库:

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.12' implementation 'com.android.support:design:27.0.2' implementation 'com.android.support:mediarouter-v7:27.0.2' implementation project(':mylib-module:mymodule') implementation 'com.google.firebase:firebase-core:10.0.1' }

希望这可以帮助 :)

于 2018-01-31T10:11:51.290 回答
0

使用 Android Studio 时,请确保包含您的 Java 类的“src”文件夹标记为“Source Root”。否则,它不会进入 APK。

于 2016-01-07T19:27:24.707 回答
0

在我的情况下,它是项目中的清单声明android.app.Application和模块中的实际代码。

于 2016-04-02T13:48:57.603 回答
0

https://stackoverflow.com/a/29821331/11480535为我工作了一点点,我还必须删除projectFilesBackup/

于 2020-01-14T14:48:33.640 回答
0

转到Build Menu 和Clean Project

上述解决方案对我来说非常好。

于 2018-02-03T09:29:05.357 回答
0

我遇到了同样的错误,所以我添加了一份 Main_activity 并将其命名为 MainActivity。有效。

于 2021-08-06T08:40:14.037 回答