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

Я уже пробовал 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)); } } } 

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

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

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

Затем переименуйте проект.

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

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

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

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

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

Переход к более старой версии на канале dev снова заработал:

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

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

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

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

     @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 вашего модуля приложения

  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> 

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

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

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

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

Источник

Я не знаю, что это поможет вам … в любом случае попытайтесь использовать тему приложения как @ 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> 

Как я вижу в вашем Журнале,

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

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

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

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

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

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