2013-11-12 2 views
10

я был занят с моим приложением в течение недели, когда вдруг:Android Студия: 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 в меню File IDE

Update 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 \ главная \ Java \ п \ тест \ 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)); 
     } 
    } 
} 
+0

У вас забыл импортировать какие-либо библиотеки? –

+0

нет ошибок импорта (или других ошибок вообще) в моей IDE – patrick

+0

попробуйте мой ответ и см. –

ответ

4

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

0

я не знаю, что это поможет you..anyway попытаться использовать тему применения в качестве @ стиль/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> 
+0

Нет, ничего не меняет – patrick

+0

Вы уверены, что у вас есть mainactivity в пакете nl.test.myapp? – Manivannan

+0

yep, вы можете увидеть мой обновленный вопрос – patrick

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

ничего не меняет – patrick

0

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

+0

нет опечаток, он работал до уборка – patrick

+0

Хм, тогда почему он жалуется на 'nl.test.MyApp.MainActivity'? –

0

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

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

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

Source

+0

не исключено, см. Обновленный вопрос – patrick

+0

, пожалуйста, перейдите по ссылке, что я добавил. Ошибка кажется такой же, как ваша –

+0

спасибо, но я добавил файл compiler.xml в мой вопрос, вы можете посмотреть – patrick

2

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

Это случилось со мной, когда я использовал его с «Пикассо». Я использовал два логических 'isFound' и' isConnected' для моей собственной проверки. Оказывается, это было то место, где я ошибался. Изменение имени переменной на что-то вроде 'is_Connected' сделало трюк. –

2

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

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

Переключение обратно к старой версии на канале Dev получил вещи работать снова:

  1. Перейти в Настройки/Внешний вид & Behavior/Системные настройки/Update
  2. Изменения в Dev канала и проверку.
+0

@ The_Martian Сделано, спасибо. – ktusznio

0

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

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

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

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

6

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

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

Также убедитесь, что имя пакета соответствует пакету в андроиде манифеста .xml.

Затем повторите проект.

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

+0

это решило проблему! Большое спасибо –

0

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

1

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

0

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

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

+0

Upvoted !! Это был единственный ответ, который решил мою проблему здесь – afazolo

0

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

0

Если вы создаете библиотеку андроида, вы можете просто забыли импортировать библиотеку в вашем приложении 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' }

Надеется, что это помогает :)

0

GO to Построение Меню и Чистый проект.

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

Смежные вопросы