Android Activity ClassNotFoundException-перепробовал все
Я только что перенастроил приложение в библиотеку фреймворка и приложение, но теперь, когда я пытаюсь запустить приложение в эмуляторе, я получаю следующую трассировку стека ошибок:
06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main
06-02 18:22:35.529: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matthewrathbone.eastersays/com.matthewrathbone.eastersays.EasterSimonSaysActivity}: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.access00(ActivityThread.java:125)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)
06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521)
06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)
06-02 18:22:35.529: E/AndroidRuntime(586): Caused by: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]
06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
06-02 18:22:35.529: E/AndroidRuntime(586): ... 11 more
обычно это означает, что файл манифеста-это неправильно, но я проверил все что мог.
вот мой класс Activity:
package com.matthewrathbone.eastersays;
import android.os.Bundle;
import com.rathboma.simonsays.Assets.Season;
import com.rathboma.simonsays.SeasonPicker;
import com.rathboma.simonsays.SimonSaysActivity;
public class EasterSimonSaysActivity extends SimonSaysActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public SeasonPicker getSeasonPicker() {
return new SeasonPicker(){
@Override
public Season getSeason() {
// TODO Auto-generated method stub
return Season.EASTER;
}
};
}
}
как вы можете видеть, он указан правильно в манифесте:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.matthewrathbone.eastersays"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".EasterSimonSaysActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Я понятия не имею, как исправить это, и был бы признателен за любую помощь. Я просмотрел много подобных вопросов на SO, не видя этого конкретного поведения.
Подробнее:
- я проверил внутри сгенерированного APK и класс имеет запись в
класс.dex file - я пробовал очистить / построить проект в
затмение - я пробовал использовать совершенно новый образ устройства, который не имеет
копия АПК на нем уже - я изменил библиотеку проект в
обычная java, а затем изменилась обратно в проект android, нет
разница - добавление абстрактного SimonSaysActivity в манифест не имеет никакого значения.
- я попытался сделать каждую зависимость проектом библиотеки android и синхронизировать версию android, которую они требуют, это не помогло
найдено решение (см. ниже). Всем, кто опубликовал ответ / комментарий: Вы все рок, спасибо за помощь мне работать через проблемы!
похоже, что это введено обновлением SDK tools. Спасибо @Ник ниже в комментариях по этой ссылке:
http://iqadd.com/item/noclassdeffounderror-adt-fix
15 ответов:
Я провел некоторое время, играя с моим собственным проектом, и я могу повторить вашу проблему и получить точно такую же трассировку стека исключений при попытке запустить мой основной проект, поэтому я думаю, что это может быть причиной:
Так же, как я думал, это все о том, как вы ссылаетесь на свой проект библиотеки Android в главном проекте Android, простые настройки конфигурации Eclipse.
Неправильно:
Щелкните правой кнопкой мыши основной проект, выберитеProperties -> Java Build Path -> Projects -> Add...этот добавить проект библиотеки Android как проект зависимостей в пути сборки основного проекта Android, это не работает. Если все необходимые ресурсы, связанные с Android, определены в основном проекте, вы не получите никакой ошибки во время компиляции, но при запуске приложения вы получите исключение, описанное в вопросе.Правильно:
Щелкните правой кнопкой мыши основной проект, выберитеProperties -> Androidв разделе Библиотека, добавьте свой проект библиотеки в Android здесь. Проверьте официальное руководство разработчика ссылка на проект библиотеки. Это должно решить все ваши проблемы. Также обратите внимание, что вы должны использовать относительный путь ссылки на фактический проект библиотеки Android, как указано в библиотечный проект-соображения развития.надеюсь, что это помогает.
Я проверил код, который вы дали , и она отлично работает. попробуйте изменить "extends SimonSaysActivity "на просто" extends Activity " и убедитесь сами, что это работает .
причина , по которой он не работает, либо SimonSaysActivity не расширяет активность (что я не думаю, что вы сделали эту ошибку), либо порядок пути сборки неверен .
чтобы перейти к порядку пути сборки, перейдите по ссылке:
project->properties->Java build path->order and export .мой основной заказ: проект src , project gen, android 4.0.3, зависимости от android .
эта проблема обычно возникает при использовании библиотек .
Я только что преобразовал приложение в библиотеку фреймворка и приложение.
Я не совсем уверен, что вы пытаетесь сказать здесь, но тот факт, что вы использовали слово "рефакторинг" здесь, заставляет меня полагать, что вы неправильно понимаете концепцию библиотечного проекта.
какие библиотечные проекты are:
проект библиотеки-это проект разработки, содержащий общий исходный код и ресурсы. Другие проекты Android могут ссылаться на проект библиотеки и включать его скомпилированные источники в свои .APK файлы во время компиляции.
какие библиотечные проекты не:
проект библиотеки отличается от стандартного проекта Android тем, что вы не можете скомпилировать его непосредственно в один
.apkфайл и запустить его на устройстве Android. Вы не можете использовать проекты Android в качестве проекта библиотеки, а затем иметь другой проект Android расширения библиотека проект. Это не работает таким образом.
тем не менее, я хотел бы исследовать структуру вашего библиотечного проекта и убедиться, что вы настроить его правильно. Это нормально использовать библиотеку для хранения общего кода / ресурсов, но если ваша библиотека пытается вести себя так, как если бы она была отдельной
.apkв самом проекте библиотеки, то вы, вероятно, сделали что-то не так. Я считаю, чтоClassNotFoundExceptionбыл бы брошен, если бы это было так. Чтобы решить эту проблему, я бы просто создать проект библиотеки с нуля, а не пытаться преобразовать проект Android проект библиотеки. Это позволит вам не столкнуться с крошечными, раздражающими ошибками.не стесняйтесь размещать больше кода, если у вас все еще возникают проблемы. Вы также должны немного подробнее рассказать о структуре (и назначении) вашего библиотечного проекта... почему вы решили использовать его, как вы его создали и т. д.
у меня была эта проблема с проектом, над которым я работал, хотя мой случай был другим. Если кто-то там все еще не может найти решение своей проблемы, попробуйте проверить это:
В Eclipse:
Project properties -> Java Build Path -> Source tabвнутри вы найдете список со всеми исходными папками, которые будут скомпилированы и помещены в сгенерированный apk каждый раз, чтобы построить свой проект (и / gen). Типично:
>MyProject/gen >MyProject/srcто, что вы хотите быть уверены, что внутри каждая из ваших исходных папок (исключить / gen, поэтому только / src в данном случае) элемента
Output folderвыводится в папку вывода по умолчанию, которая являетсяMyProject/bin/classes. Сделайте это, выбрав выходную папку и нажав кнопку Удалить из правого набора кнопок (это заставит его указать на папку по умолчанию).если вы не видите папку вывода подэлемента, установите флажок "Разрешить вывод папок для исходных папок" прямо под списком
classNotFoundException в Java является подклассом java.ленг.Исключение и приходит, когда виртуальная машина Java пытается загрузить определенный класс и не нашел запрошенный класс в classpath.
Подробнее: http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html#ixzz3yX3WBeFA
попробуйте пойти к
Project -> Properties -> Java Build Path -> Order & Exportи Подтвердите Android Частные Библиотеки проверяются на ваш проект и для всех других библиотечных проектов, которые вы используете в своем приложении.Как бороться с ClassNotFoundException
- убедитесь, что имя запрошенного класса правильно и что соответствующий .банку файл существует в вашем classpath. Если нет, то вы должны явно добавьте его в путь к классам вашего приложения.
- в случае, если указанный .jar-файл существует в вашем пути к классам, то, ваш путь к классам приложения становится переопределенным, и вы должны найти точный путь к классам, используемый вашим приложением.
- в случае, если исключение вызвано классом третьей стороны, вы должны определите класс, который создает исключение, а затем добавьте отсутствует .банку файлы в папке classpath.
хотя это не будет применимо для всех, у меня недавно была эта проблема, потому что мой проект не смог связаться с общей библиотекой, присутствующей на устройстве. Я совсем забыл укажите в моем манифесте приложение
<uses-library>.
какие интерфейсы или родительские классы использует/расширяет SimonSaysActivity и доступны ли они в версии Android, которую вы используете? Я видел подобные проблемы, когда моя деятельность реализовала интерфейс API, который не был доступен в версии Android, которую я использовал.
в моем случае моя деятельность реализована в интерфейсе PopupMenu.OnDismissListener, который доступен только в API 14, но когда я запустил приложение на своем устройстве 2.3, я получил java.ленг.Исключение ошибке типа noclassdeffounderror за свою деятельность.
У меня была та же проблема, и я потратил большую часть дня, пытаясь все виды вещей. Приложение побежал найти при развертывании с одного компьютера, но не на этом ПК. В конце концов, это оказалось отсутствующей природой java! Странно, как он показал мне java build paths, order/export и все такое, но еще не имел java-природы. : (Надеюсь, это сэкономит кому-то еще много времени
Если вы следовали всем подсказкам (проверили частные библиотеки и т. д.) и все еще есть ошибка. Проверьте свой манифест для этой строки кода в приложении-tag
android:hasCode="false"удалить его и будьте счастливы. (Я был, наконец):)
решение, предоставленное @yorkw, абсолютно правильно. У меня была дополнительная проблема, в одном из файлов макета я неправильно упомянул абсолютное имя. Это должно было быть
<android.support.v4.view.ViewPager xmlns:android="...вернее я его поставил
<android.support.v4.app.view.ViewPager xmlns:android="...после решения этих, он работал хорошо.
Верьте или нет, исправление для меня состояло в том, чтобы удалить старую версию (2.0) библиотеки google analytics из моего проекта, попробовав все в течение не менее 4 часов. Конечно, обновление этой библиотеки также может быть решением. Таким образом, это может быть проблема управления версиями jar зависимостей.
Я получал ту же проблему. Но потом я проверил текущую структуру приложения.Я обнаружил, что более старая структура приложения (я не знаю, когда она изменяется разработчиками Android framework) имеет имя папки
"lib"что теперь"libs". Я переношу все файлы jar в "libs", и ошибка исчезла. Я надеюсь, что это может помочь кому-то :)
попробуйте сделать ваш манифест что-то вроде этого.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="zvjezdan.veselinovic.yahtzee_" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".YahtzeeActivity" 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 = ".Scoring_Page" /> </application> </manifest>причина этого заключается в том, что:
public class EasterSimonSaysActivity extends SimonSaysActivity {использует другой вид деятельности. Так что если у вас есть 2 мероприятия, то вам нужно добавить оба из них. Конечно, вы их импортировали, но ваш манифест тоже должен это знать. Вот как я "переключил страницы" для моего проекта yahtzee. И мне все еще нужна помощь. = /
Comments