Android ClassNotFoundException: non è stata trovata la classe nel percorso


97
10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Looper.loop(Looper.java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invoke(Method.java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

Non sono davvero sicuro di cosa lo stia causando poiché è elencato correttamente nel manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gvg.simid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Ho anche aggiunto "Librerie private Android" al percorso di creazione e l'ho spostato all'inizio di "Ordina ed esporta", ma mi dava comunque lo stesso errore.

EDIT: ho ricostruito completamente il progetto e non sono riuscito a riprodurre l'errore. Non sono sicuro di cosa lo stesse causando.


2
stai usando proguard?
Juangcg

Proguard non è abilitato.
Phito


prova ".Login" in Android: name, invece, Android aggiungerà il resto del prefisso da solo se non è in grado di rilevarlo. Potrebbe essere solo uno strano problema di analisi con Eclipse
Darryl Bayliss

@Juangcg Ho letto quel post prima di creare questo, ma sfortunatamente tutto ciò che ho provato da lì non ha funzionato.
Phito

Risposte:


76

Ho avuto lo stesso problema per il mio progetto. È successo a causa del conflitto nella versione della libreria di supporto Android tra il mio progetto e il progetto della libreria che ho aggiunto nel mio progetto. Metti la stessa versione della libreria di supporto Android nel tuo progetto e progetti di libreria che hai incluso e build pulita ... Tutto funzionerà ...


3
Grazie uomo!!! Ero sicuro di averlo già fatto, ma ho controllato e le versioni erano diverse! Molte grazie!
Rodrigo Venancio

2
commento questo per ricordare la prossima volta di "aggiornare" sdk, guarda questa risposta
Enrique San Martín

1
Qualche idea sul perché il problema si verifichi se non utilizzo le librerie di supporto?
Budda

33

Questo metodo seguente ha funzionato per me

  • Fare clic con il tasto destro del mouse projecte selezionareproperties
  • Si aprirà il pannello "Proprietà per". Dal menu a sinistra vai su Java Build Path->Order and Export
  • Dall'elenco sottostante deseleziona la casella accanto a "Android Dependencies"
  • Finalmente clean your projecte corri

8
Ha funzionato per me. Qual è il significato di "dipendenze Android" e perché è stato utile in questo caso particolare?
Oleg Gryb

Ha funzionato perfettamente per me! Molte grazie!
prajitdas

7
Queste sono le istruzioni per Eclipse? Non riesco a seguire queste istruzioni per Android Studio. Qual è il mio project? Cosa significa?
Adam Johns

1
Sì, queste istruzioni sono per eclipse
Chris

2
Questo legame ha passi per Android Studio stackoverflow.com/questions/18533054/...
Joseph Selvaraj

13

Per quelli di voi che hanno questo problema su Android Studio, ho avuto lo stesso problema dopo un'unione e per qualche motivo è persistito anche dopo cleane invalidate cash/restartoperazioni che mi stavano facendo impazzire.

Risulta, può essere risolto eseguendo gradle build una volta dalla riga di comando. Esegui semplicemente quanto segue nella directory del progetto:

./gradlew assemble clean
./gradlew assemble

Spero che possa risparmiare a qualcuno la perdita di tempo e la frustrazione che ho dovuto affrontare.


Ha funzionato anche per me
davedavedave il

12

Ho avuto lo stesso problema, questo ha funzionato per me

1) Percorso completo di attività nella festa principale al posto del percorso relativo.

2) Elimina la cartella "build" e pulisci il progetto.


L'eliminazione della cartella build ha funzionato per me. Ho perso alcune ore su questo problema, grazie
Guy S

Ha funzionato anche per me. Grazie.
Dushyant Suthar

Questo è il vero affare. XD
noob-Sci-Bot

9

Se stai usando Eclipse prova Project -> Clean


Funziona per Android Studio - Pulisci / Ricostruisci progetto ed esegui
Frcake

8

Se hai aggiunto un nuovo Library Projectcome modulo al tuo progetto Android e lo stai utilizzando Kotlinnella tua libreria , non dimenticare di aggiungere

apply plugin: 'kotlin-android'

all'inizio del file Gradle del modulo. Android Studio non aggiunge questa riga quando hai creato un nuovo modulo e questo potrebbe farti perdere ore come me.

Modifica: dopo un po ', ho lottato di nuovo con questo problema e questa volta ho dimenticato di aggiungere il mio modulo come dipendenza dal progetto. :)


L'ho risolto per me e volevo solo pubblicare una risposta. Chi salta alla pagina due di SO per trovare una soluzione?
Kuno

Questo problema si verifica quando utilizziamo il progetto di libreria java ... questa soluzione ha risolto il mio problema
Devrath

7

Ciò accade se cambiamo il percorso di compilazione dell'APP, questo può essere in ogni caso di aggiunta o rimozione o modifica di librerie o file .jar. La soluzione migliore è riavviare Eclipse.


6

Se ricevi questo errore durante l'utilizzo della nuova funzionalità di esecuzione istantanea in Android Studio 2.0 e versioni successive, si tratta di una sorta di bug dalla loro parte.
Per risolvere questo problema dovrai interrompere manualmente la tua app su Dispositivo / Emulatore se non è arrestato, quindi da Android Studio seleziona BuildRebuild Project.
Quindi fare clic sul pulsante Esegui o MAIUSC + F10


6

Per chiunque abbia l'abilitazione multidex scrivere questo

all'interno di build.gradle

apply plugin: 'com.android.application'

android {
 defaultConfig {
      multiDexEnabled true
  }
 dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:multidex:1.0.1'
}

scrivi una classe EnableMultiDexcome sotto

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }
}

e AndroidManifest.xmlscrivi questo className all'interno del tag dell'applicazione

 <application
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">

ohhhhh mahn ... risposta perfetta..ho visto questa risposta ma nessuno ha votato, quindi l'ho trascurato e sono andato per risposte votate ma non ha funzionato..finalmente ho appena provato questo e l'ho capito, grazie mahn. :) :) :) :)
Sachin Varma

contento che abbia aiutato :)
Manohar Reddy

2
Il punto principale è estendere l'applicazione dalla MultiDexApplicationclasse invece di Application.
VSB

Grazie. Avevo già alcune applicazioni in Manifest. Esteso da MultiDexApplicatione l'eccezione è scomparsa su Android 4.4.
CoolMind

6

Se utilizzi Multidex su Android 4.4 e versioni precedenti, il problema potrebbe essere che la tua classe di attività si trova nel secondo file dex e quindi non è stata trovata dal sistema Android.

Per mantenere la classe di attività nel file dex principale, vedere questa pagina:

https://developer.android.com/studio/build/multidex.html#keep


Per trovare quali classi si trovano in un file dex utilizzare Android Studio .

Basta trascinare e rilasciare il tuo apk in Android Studio. Dovresti essere in grado di vedere i tuoi file dex nell'apk explorer.

Quindi seleziona il file dex per vedere quali classi ci sono all'interno.


un'altra alternativa è dexdump:

Puoi controllare il contenuto dei tuoi file dex contenuti nel tuo apk usando il comando dexdump che puoi trovare in

android-sdk / build-tools / 27.0.3 / dexdump

Per gli utenti Windows vedere questo strumento che ho creato per facilitare il processo


1
Quando colleghi il tuo strumento, assicurati di dichiararne il proprietario .
LW001

5

Nel mio caso è stato il processo di minification del proguard che ha rimosso alcune classi importanti dal mio apk di produzione.

La soluzione era modificare il file proguard-rules.pro e aggiungere quanto segue:

-keep class com.someimportant3rdpartypackage.** { *; }

3

1) Crea la cartella libs nella root del progetto
2) Copia e incolla il file jar al suo interno
3) Configura il percorso di compilazione (Aggiungi jar)
4) Pulisci ed esegui

applausi :-)


3

Credimi o no ... ho provato quasi tutte le risposte che avevo trovato qui su stackoverflow. Niente avrebbe aiutato, fino a quando non avessi riavviato la macchina. Il mio Android Studio funziona su Ubuntu 16.04 LTS.


Lo stesso qui, ho provato tutto e ricomincia seguendo il tuo commento. Ho visto nel mio output un riferimento a un nome di classe rifattorizzato che "Impossibile trovare" nonostante abbia cancellato l'intera cartella di build .. appena avviato Android
Alwin Kesler

2

Ho riscontrato questo errore una volta quando ho definito una classe che estendeva una vista ma faceva riferimento a questa vista personalizzata nel file di layout con il nome sbagliato. Invece di <com.example.customview/>, avevo incluso <com.customview/>nel file di layout XML.


2

Ho affrontato lo stesso problema e l'ho risolto facendo quanto segue:

Dal menu di costruzione seleziona

1- progetto pulito.

2- Crea APK.


Passo sempre ore a cercare una soluzione su SO e risulta che Clean -> Build è tutto ciò che dovevo fare.
Shishir Shetty

2

Ho incontrato lo stesso problema e ho notato che il codice di esempio è stato messo nella directory "java" invece della directory "src". Dopo aver spostato il codice in src, il problema è stato risolto.

Assicurati inoltre che la directory dell'app sia suddivisa in più cartelle. ad esempio /main/com/site/appname/no/main/com.site.appname/

Spero che funzioni ~


Hai inchiodato il problema che avevo sulla testa! Non ho dormito abbastanza, non mi sono nemmeno reso conto che le lezioni erano nella cartella Java :)
bran.io

2

Affronto lo stesso problema e, dopo molto lavoro e ricerche, ho trovato la soluzione: ho semplicemente ripulito il progetto e poi creato l'apk. -Build-> Clean Project -Build-> Build APK (s) Spero che sia utile .....


1

Ho avuto questo problema di recente e sto usando Android Studio 0.8.4

Il problema è stato il fatto che ho deciso di rinominare un file di layout di menu XML che si chiamava main.xml.

Fai clic destro su di esso e scegli Refactoring -> Rinomina . Prima di rinominarlo, assicurati di deselezionare "Cerca in commenti e stringhe" e di premere Refactoring .

Poiché il mio file era originariamente chiamato "main" , ha rinominato i percorsi critici in app.iml e build.gradle, principalmente java.srcDirs in build.gradle, poiché il percorso è definito come 'src/main/java'.

Spero che questo aiuti chiunque possa riscontrare questo problema.


1

Ho riscontrato questo problema dopo l'aggiornamento dalla versione 18. Dopo l'aggiornamento ho avuto quanto segue: Project Build Target era 5.01, targetSDKVersion = 21

Ma: Build Tools proveniva ancora da Android 4.3.1 (18) Quello che ho notato è che quelle app che derivavano le loro attività da ActionBarActivity si bloccavano con l'errore precedente quelle che non venivano ancora eseguite.

Quindi la soluzione semplice era quella di utilizzare gli ultimi Android SDK Build Tools 21.1.2 invece di solo quelli di Android SDK Build Tools 18, che sembra in qualche modo l'impostazione predefinita.

Quindi il colpevole sembra la libreria Appcompat, che uso per la compatibilità con le versioni precedenti di Actionbar.

E a proposito : usando la libreria appcompat ho dovuto impostare / correggere: $SDKInstallDIR$\Android\android-sdk\extras\android\support\v7\appcompat\project.properties target=android-21(che è stato consigliato in qualche altro post utile e che ha un valore di 19 per impostazione predefinita))


1

Ho avuto lo stesso problema su Windows. Avevo rinominato il percorso del progetto in qualcosa contenente uno spazio.

Assicurati che il percorso del tuo progetto non contenga uno spazio.


Di che percorso parli?
Quality Catalyst

1

Soluzione menzionata qui -> La soluzione Multidex Issue ha funzionato per me. Di seguito è riportato ciò che deve essere aggiunto al contesto dell'applicazione:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

0

Ho avuto questo problema, sollevato da diverse cause, ma lo vedo nel tuo stacktrace " **Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**", ho trovato una differenza nel mio .classpathprima che smettesse di funzionare.

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Ho AGGIUNTO la riga:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

questa è la versione finale:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Ora funziona! =)


0

Ho avuto lo stesso identico problema. Come suggerito da @weiweia, spostare il codice dalla directory java a src ha funzionato per me. Ho anche rimosso le dipendenze Android da Progetto -> Proprietà -> Percorso build Java -> Ordina ed esporta e mi sono assicurato di includere solo i progetti di libreria nella schermata Android.


0

Ho avuto questo problema per un bel po 'e, come tutti gli altri, le risposte sopra non si applicavano al mio progetto.

Nel mio progetto avevo collegato un progetto al mio progetto e lanciava ClassDefNotFoundError ogni volta che veniva eseguito del codice per l'altro progetto.

Quindi questa era la mia soluzione. Sono andato alle proprietà del progetto del mio progetto e Java Build Path. Ho premuto la scheda "Source" e "link source" dalla cartella src dell'altro progetto al mio progetto e ho chiamato una nuova cartella "core-src".

Spera che questa soluzione aiuti qualcuno


0

Ho avuto lo stesso problema. Sto usando Xamarin.Android.

Il problema nel mio caso era che ho cambiato versionCode e versionName.

Non ho avuto problemi quando li ho impostati in questo modo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

Il problema è apparso quando l'ho cambiato in questo (versionCode 2 e versionName 0.0.1):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

Ho risolto il problema passando a versionCode 2 e versionName 1.0.0.1, in questo modo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

Non sono sicuro del motivo per cui questo fosse un problema, forse ad Android non piace una versione inferiore Nome con una versione superiore Codice?

Ho trovato quanto segue su http://developer.android.com/guide/topics/manifest/manifest-element.html#vname

android: versionCode Un numero di versione interno. Questo numero viene utilizzato solo per determinare se una versione è più recente di un'altra, con numeri più alti che indicano versioni più recenti. Questo non è il numero di versione mostrato agli utenti; quel numero è impostato dall'attributo versionName. Il valore deve essere impostato come numero intero, ad esempio "100". Puoi definirlo come preferisci, purché ogni versione successiva abbia un numero maggiore. Ad esempio, potrebbe essere un numero di build. Oppure puoi tradurre un numero di versione in formato "xy" in un numero intero codificando la "x" e la "y" separatamente nei 16 bit inferiore e superiore. Oppure puoi semplicemente aumentare il numero di uno ogni volta che viene rilasciata una nuova versione.

android: versionName Il numero di versione mostrato agli utenti. Questo attributo può essere impostato come stringa non elaborata o come riferimento a una risorsa stringa. La stringa non ha altro scopo che essere mostrata agli utenti. L'attributo versionCode contiene il numero di versione significativo utilizzato internamente.


0

Nel caso qualcuno dovesse affrontare lo stesso problema di me e nessuna risposta suggerita qui aiuta.

Per me la causa era che il refactor dello studio Android è difettoso. Ho spostato una classe interna al di fuori di una classe, che era una vista e quindi aveva anche un xml, in cui era impostato il percorso diretto. Questo percorso non verrà refactoring da studio! E non verrà generato alcun errore.

Spero che questo aiuti qualcuno. Saluti.


0

Nel nostro caso volevamo compilare la versione di Vagrant e abbiamo riscontrato lo stesso errore. L'abbiamo risolto da clean projecte rebuild projectnel menu Build


0

Ho appena riavviato il dispositivo e ho eseguito l'app. Ha funzionato senza problemi. Spero che questo aiuti qualcuno :)


0

Ho trovato questo errore in Android Studio quando ho provato a eseguire il debug in un dispositivo con API 23 , quindi ho controllato Android Studio e ho notato che non avevo installato questa versione dell'API 23 . Dopo l'installazione, ho risolto il problema.


0

Ho avuto questo problema più volte e spesso non ho fatto qualcosa di evidentemente sbagliato con le dipendenze.

È sempre una buona idea controllare se questa classe "non trovata" è presente nell'apk finale. Se lo è, come è successo nei miei casi, il problema di solito è:

Non è che la classe data non sia stata trovata, ma non può essere caricata perché manca la sua super classe.

Controlla se la classe che estendi è disponibile e quindi prova a correggere lo script di compilazione o le dipendenze di conseguenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.