Android Activity ClassNotFoundException-próbowałem wszystkiego

Właśnie zrefakturowałem aplikację do biblioteki frameworku i aplikacji, ale teraz, gdy próbuję uruchomić aplikację w emulatorze, dostaję następujący ślad stosu błędów:

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.access$2300(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

Zazwyczaj oznacza to, że plik manifestu jest w jakiś sposób niewłaściwy, ale sprawdziłem dwukrotnie wszystko, co przychodzi mi do głowy.

Oto moja klasa aktywności:

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

Jak widzisz, jest poprawnie wymieniony w manifeście:

<?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>
Nie mam pojęcia, jak to naprawić i byłbym wdzięczny za każdą pomoc. Przeskanowałem wiele podobnych pytań na temat SO, nie widząc tego konkretnego zachowania.

Więcej informacji:

  • sprawdziłem wewnątrz wygenerowanego APK i klasa ma wpis w zajęcia.plik dex
  • próbowałem sprzątać / budować projekt w eclipse
  • próbowałem użyć zupełnie nowego obrazu urządzenia, który nie ma Kopia APK na nim już
  • zmieniłem projekt biblioteki na zwykłą Javę, a następnie zamienioną z powrotem na projekt z Androidem, nie. różnica
  • dodanie abstraktu SimonSaysActivity do manifestu nie robi różnicy.
  • próbowałem uczynić każdą zależność projektem biblioteki Androida, i synchronizacja wersji Androida, że wymagają, to nie pomogło

Znaleziono rozwiązanie (patrz poniżej). Do wszystkich, którzy napisali odpowiedź / komentarz: you all rock, dzięki za pomoc w pracy przez problemy!

Wygląda na to, że jest to wprowadzone przez SDK tools upgrade. Podziękowania dla @Nick poniżej w komentarze do tego linku: http://iqadd.com/item/noclassdeffounderror-adt-fix

Author: Alex Lockwood, 2012-06-03

15 answers

Spędziłem trochę czasu grając z moim własnym projektem, i jestem w stanie replikować twój problem i uzyskać dokładnie ten sam ślad stosu wyjątków podczas próby uruchomienia mojego głównego projektu, więc myślę, że to może być przyczyną: {]}

Tak jak myślałem, chodzi o to, jak odwołujesz się do projektu biblioteki Androida w głównym projekcie Androida, Proste ustawienia konfiguracji Eclipse.

The Wrong Way:
Kliknij prawym przyciskiem myszy główny projekt, wybierz Properties -> Java Build Path -> Projects -> Add..., to Dodaj projekt biblioteki Androida jako projekt zależności w ścieżce budowania głównego projektu Androida, to nie działa. Jeśli wszystkie wymagane zasoby związane z Androidem są zdefiniowane w głównym projekcie, nie otrzymasz żadnego błędu podczas kompilacji, ale po uruchomieniu aplikacji otrzymasz wyjątek opisany w pytaniu.

Prawidłowy Sposób:
Kliknij prawym przyciskiem myszy główny projekt, wybierz Properties -> Android, w sekcji Biblioteka dodaj tutaj swój projekt biblioteki Androida. Zapoznaj się z oficjalnym przewodnikiem deweloperów odnoszącym się do projektu biblioteki. To powinien rozwiązać twój problem. Zauważ również, że musisz użyć względnej ścieżki odniesienia do rzeczywistego projektu biblioteki Androida, jak opisano w rozważaniach dotyczących projektu biblioteki .

Mam nadzieję, że to pomoże.
 144
Author: yorkw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-09 23:50:19

Przetestowałem kod, który podałeś, i działa dobrze. spróbuj zmienić "rozszerza SimonSaysActivity" NA po prostu "rozszerza aktywność" i przekonaj się, że to działa .

Powodem , dla którego to nie działa, jest albo SimonSaysActivity nie rozszerza aktywności (co nie wydaje mi się, że popełniłeś ten błąd), albo kolejność ścieżki budowania jest błędna .

Aby przejść do kolejności budowania ścieżki, przejdź do:

project->properties->Java build path->order and export .
Moje podstawowe zamówienie to: project src, project gen, android 4.0.3, zależności Androida .

Ten problem występuje zwykle, gdy używasz bibliotek .

 8
Author: android developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-02 22:58:43

Właśnie przekształciłem aplikację w bibliotekę frameworku i aplikację.

Nie jestem do końca pewien, co próbujesz powiedzieć, ale fakt, że użyłeś tu słowa "refakturowany", prowadzi mnie do przekonania, że nie rozumiesz koncepcji projektu biblioteki.


Czym są projekty biblioteczne :

Projekt biblioteki jest projektem rozwojowym, który zawiera współdzielony kod źródłowy i zasoby. Inne projekty Android mogą odwoływać się do projektu bibliotecznego i zawrzeć w nich zebrane źródła .pliki apk w czasie kompilacji.

Jakie projekty biblioteczne nie są :

Projekt biblioteki różni się od standardowego projektu Androida tym, że nie można skompilować go bezpośrednio do pojedynczego pliku .apk i uruchomić go na urządzeniu z Androidem. Nie można używać projektów na Androida jako projektu bibliotecznego, a następnie mieć inny projekt na Androida rozszerzyć projekt biblioteki. To tak nie działa.


To powiedziane, I zbadanie struktury projektu biblioteki i upewnienie się, że został poprawnie skonfigurowany. Korzystanie z biblioteki do przechowywania współdzielonego kodu / zasobów jest w porządku, ale jeśli Biblioteka próbuje zachowywać się tak, jakby była oddzielną .apk w samym projekcie biblioteki, prawdopodobnie zrobiłeś coś złego. Wierzę, że ClassNotFoundException zostałby wyrzucony, gdyby tak było. Aby rozwiązać ten problem, po prostu zbudowałbym projekt biblioteki od podstaw, zamiast próbować przekonwertować Androida projekt do projektu biblioteki. To zapobiegnie napotkaniu małych, irytujących błędów.

Możesz dodać więcej kodu, jeśli nadal masz problemy. Powinieneś również rozwinąć nieco więcej na temat struktury (i celu) projektu biblioteki... dlaczego zdecydowałeś się go użyć, jak go stworzyłeś itp.

 2
Author: Alex Lockwood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-10 00:05:45

Dla Eclipse Kepler( Mac): Control-click project- > Android Tools - > add support library

 2
Author: PSchuette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 23:27:12

Miałem problem z projektem, nad którym pracowałem, choć moja sprawa była inna. Jeśli ktoś tam nadal nie może znaleźć rozwiązania swojego problemu, spróbuj to sprawdzić:

W Eclipse:

Project properties -> Java Build Path -> Source tab

Wewnątrz znajdziesz listę wszystkich folderów źródłowych, które mają być skompilowane i umieszczone w wygenerowanym pliku apk za każdym razem, aby zbudować swój projekt(i /gen ). Typowo:

>MyProject/gen
>MyProject/src

To, czego chcesz się upewnić, to to, że wewnątrz każdego z folderów źródłowych (wyklucz /gen , więc tylko / src w tym przypadku) pozycja Output folder jest poiting do domyślnego folderu wyjściowego, którym jest MyProject/bin/classes. Zrób to, wybierając folder wyjściowy i klikając Usuń z prawego zestawu przycisków (spowoduje to, że będzie wskazywał na domyślny folder).

Jeśli nie widzisz podkatalogu Output folder, zaznacz opcję "Zezwól na foldery wyjściowe dla folderów źródłowych" tuż pod listą

 2
Author: Gonzalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 23:00:33

ClassNotFoundException w Javie jest podklasą Javy.lang.Wyjątek i pojawia się, gdy wirtualna maszyna Javy próbuje załadować określoną klasę i nie znajduje żądanej klasy w classpath.

Czytaj więcej: http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html#ixzz3yX3WBeFA

Spróbuj Project -> Properties -> Java Build Path -> Order & Export i potwierdź, że biblioteki prywatne Androida są sprawdzane dla Twojego projektu i dla wszystkich innych bibliotek projekty, których używasz w swojej aplikacji.

Jak radzić sobie z ClassNotFoundException

  1. sprawdzić, czy nazwa żądanej klasy jest poprawna i czy właściwe .plik JAR istnieje w Twojej classpath . Jeśli nie, musisz jawnie dodaj go do ścieżki klasowej aplikacji.
  2. W przypadku, gdy określony .plik JAR istnieje w Twojej classpath wtedy, twój classpath aplikacji staje się przesłonięty i musisz znaleźć dokładne classpath używany przez Twoją aplikację.
  3. W przypadku, gdy wyjątek jest spowodowany przez klasę strony trzeciej, musisz zidentyfikuj klasę, która rzuca wyjątek, a następnie dodaj brak .pliki jar w Twojej classpath.
 1
Author: IntelliJ Amiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 10:05:52

Chociaż nie będzie to miało zastosowania dla wszystkich, ostatnio miałem ten problem, ponieważ mój projekt nie łączył się ze współdzieloną biblioteką obecną na urządzeniu. Zapomniałem określić w manifeście , że moje podanie <uses-library>.

 1
Author: lase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 14:21:52

Usuń klasy.dex from bin and rebuild project

 1
Author: Afzaal Iftikhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 07:06:53

Jakich interfejsów lub klas nadrzędnych używa/rozszerza SimonSaysActivity i czy są one dostępne w wersji Androida, której używasz? Widziałem podobne problemy, gdy Moja aktywność zaimplementowała interfejs API, który nie był dostępny w wersji Androida, którego używałem.

W moim przypadku Moja aktywność zaimplementowała interfejs PopupMenu.OnDismissListener, który jest dostępny tylko w API 14, Ale kiedy uruchomiłem aplikację na moim urządzeniu 2.3 otrzymałem Javę.lang.Wyjątek NoClassDefFoundError dla aktywność.

 0
Author: Charles Harley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-02 23:02:59

Miałem ten sam problem i zmarnowałem większość dnia próbując różnych rzeczy. Aplikacja uruchomiła znajdź po wdrożeniu z jednego komputera, ale nie na tym jednym komputerze. W końcu okazało się to zaginioną naturą Javy! Dziwne, jak pokazał mi java build paths, order/export i wszystko to, ale jeszcze nie miał natury java. : (Mam nadzieję, że zaoszczędzi to komuś dużo czasu

 0
Author: Luke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-19 01:40:16

Jeśli zastosowałeś się do wszystkich podpowiedzi (zaznaczono biblioteki prywatne itp.) i nadal mają pluskwę. Sprawdź manifest dla tej linii kodu w znaczniku application-tag

    android:hasCode="false" 

Usuń go i bądź szczęśliwy. (W końcu byłam):)

 0
Author: Corona,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-23 12:31:33

Rozwiązanie dostarczone przez @ yorkw jest absolutnie poprawne. Miałem dodatkowy problem, w jednym z plików układu, podałem nazwę bezwzględną nieprawidłowo. Powinno być

<android.support.v4.view.ViewPager xmlns:android="...

Raczej ja to ująłem

<android.support.v4.app.view.ViewPager xmlns:android="...
Po ich rozwiązaniu zadziałało dobrze.
 0
Author: Himadri Pant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-24 09:50:34

Wierzcie lub nie, poprawką dla mnie było usunięcie starej wersji (2.0) biblioteki Google analytics z mojego projektu, po wypróbowaniu wszystkiego przez co najmniej 4 godziny. Oczywiście, aktualizacja tej biblioteki może być również rozwiązaniem. Więc może to być problem z wersjonowaniem jar zależności.

 0
Author: Criss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 23:06:54

Miałem ten sam problem. Ale potem sprawdziłem obecną strukturę aplikacji.Zauważyłem, że starsza struktura aplikacji (Nie wiem, kiedy została zmieniona przez programistów android framework) ma nazwę folderu "lib" , która jest teraz "libs". Migruję wszystkie moje pliki jar do "libs" i błąd zniknął. Mam nadzieję, że to komuś pomoże:)

 -1
Author: kaushal trivedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 09:31:28

Spróbuj zrobić coś takiego.

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

Powodem tego jest to, że:
public class EasterSimonSaysActivity extends SimonSaysActivity {

Używa innej aktywności. Więc jeśli masz 2 działania, musisz dodać oba z nich. Przyznaję, że je importowałeś, ale twój manifest też musi o tym wiedzieć. W ten sposób "zamieniłem strony" dla mojego projektu yahtzee. Nadal potrzebuję pomocy. =/

 -4
Author: Zvjezdan Veselinovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-03 06:31:31