Android Studio: ClassNotFoundException - программирование
Подтвердить что ты не робот

Android Studio: ClassNotFoundException

Я был занят моим приложением более недели, когда вдруг:

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(идентификатором для неверных представлений), после восстановления проекта эта проблема произошла

Я уже пробовал Invalidate Cashes/restart в меню файлов IDE

Обновление 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));
        }
    }
}
4b9b3361

Ответ 1

Я создал новый проект в студии Android и скопировал все из старого проекта в новый. Теперь он снова работает, без каких-либо (!) Модификаций кода.

Ответ 2

Закрыть андроид-студию. Перейдите в папку проекта. Удалить все файлы, относящиеся к intelliJ (Android Studio) i.e

  • .idea(папка)
  • *. imi (файлы)

Также убедитесь, что имя пакета совпадает с пакетом в файле android manifest.xml.

Затем reimport проект.

Это произошло со мной, потому что я переименовал корневой пакет, и IntelliJ (android studio) не отслеживал это.

Ответ 3

У меня была та же проблема, оказывается, я придумал какой-то окончательный метод. Обязательно проверьте ошибки dalvikvm в выводе logcat до FATAL EXCEPTION. Я дам вам несколько советов по этой проблеме. В моем случае у меня был окончательный метод (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]]
...

Ответ 4

Я столкнулся с этим. Мое приложение работало нормально, и однажды он только начал работать в этих ClassNotFoundExceptions. Мой код не изменился вообще.

Насколько я могу судить, это стало ошибкой в ​​сборке Android Studio. Недавно я обновился до последней версии канального канала.

Переключение на более раннюю версию на канале dev снова заработало:

  • Перейдите в Настройки/Внешний вид и поведение/Системные настройки/Обновление
  • Перейдите в Dev Channel и проверьте сейчас.

Ответ 5

У меня была аналогичная проблема. Я вспомнил, что ранее было показано сообщение "недостаточно памяти", и процесс загрузки приложения не смог закончить, остановив на dexDebug с ошибкой. Затем я выпустил достаточно памяти, но приложение началось с ClassNotFoundException.
Решение, которое сработало для меня, было удалить все "сборные" папки в проекте. Я полагаю, что gradle может помещать поврежденные файлы в папку "build", когда памяти недостаточно.

Ответ 6

Вы можете проверить механизм Multidex. Причина может быть переполнением номеров методов.

  • Добавить MultiDex.install(это); к вашему заявлению:

    @Override
    protected void attachBaseContext(Context base) {
         super.attachBaseContext(base);
         MultiDex.install(this);
    }
    
  • и добавьте

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

в ваш модуль приложения gradle.build

Ответ 7

Я не знаю, что это поможет вам... в любом случае попытайтесь использовать тему приложения как @style/Theme.AppCompat..we должны использовать как форум разработчиков.

<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>

Ответ 8

   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>

Ответ 9

Похоже, у вас где-то есть опечатка пространства имен. Найдите MyApp и измените его на MyApp.

Ответ 10

Ваш MainActivity.java исключается из компиляции, поэтому этот класс не включен в .apk. Удалить строку:

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

из раздела excludeFromCompile файла .idea/compiler.xml(или вы можете сделать это из настроек IDE).

Источник

Ответ 11

Как я могу видеть в вашем журнале,

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

Для этого вы можете изменить lib на libs, я сделал это, и это решило мою проблему.

вы увидите некоторую ошибку в проекте для решения, которое перейдет к свойствам проекта и пути сборки java. Удалите из него все библиотеки. Вы не увидите эту ошибку еще раз.:)

Ответ 12

При использовании Android Studio убедитесь, что папка "src", содержащая ваш класс Java, помечена как "Source Root". В противном случае он не попадет в APK.

Ответ 13

В моем случае это было манифестное объявление android.app.Application в проекте и фактическом коде в модуле.

Ответ 14

Это случилось со мной, и ни одна из сообщений здесь не помогла. Моя проблема также была вызвана тем, что я переименовал корневой пакет. My ClassNotFoundException показывал DexPathList, который был старым путем к моему пакету. Я нашел причину в моем Gradle Script, называемом "build.gradle(Module: app)" У меня была строка, в которой говорилось: applicationId "old package name". Я изменил это на новое имя пакета, выполнил синхронизацию Gradle, и все сработало.

Ответ 15

Если вы создаете библиотеку 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' }

Надеюсь, что это поможет:)

Ответ 16

Перейдите в меню Создать и Очистить проект.

Вышеупомянутое решение работало отлично для меня.