java.lang.ClassNotFoundException: impossibile trovare la classe nel percorso: dexpathlist


140

Attualmente sto lavorando a un progetto in cui devo usare ndk puramente nativo. Ha funzionato quando provo a eseguire un esempio di helloworld dalla fonte del motore di Irrlicht. Quindi provo ad usarlo nel mio progetto seguendo lo stesso formato di quell'esempio. Ma ho ottenuto:

03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]

durante l'esecuzione del mio progetto.

Ecco il mio file main.cpp:

#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}

#finisci se

in Android.mk:

LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json 
LOCAL_SRC_FILES :=  android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl 
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

E ho dato il nome dell'attività in AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.irrlicht.example1"
    android:versionCode="1"
    android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
        <activity android:name="android.app.POMActivity"
        android:label="HelloWorldMobile1"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:clearTaskOnLaunch="true">
        <meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />                     

Qual è l'errore che sto facendo qui? Pubblicherò il codice completo se necessario.


1
Stai usando file jar esterni?
Siddharth_Vyas

@SiddharthVyas No, non sto usando file jar esterni in questo.
Karthik Sivam,

1
La tua applicazione è multi-dex? In tal caso, ciò spiega il problema.
IgorGanapolsky,

quando ho fatto un apk firmato questo errore non si è verificato. debug
j2emanue,

Hai trovato una soluzione funzionante?
Benobab,

Risposte:


84

Ho provato tutte le opzioni possibili ma il risultato è zero. Alla fine ho trovato la soluzione corretta che mi è stata utile. Vai a disabilitare la corsa istantanea Vai a File -> Impostazioni -> Build, Execution, Deployment -> Instant Run -> Deseleziona la casella di controllo per la corsa istantanea . Esegui la tua app una volta e questo file apk funziona correttamente.


11
Questa è la risposta corretta per Android Studio. Non riesco a credere che Instant Run sia ancora così pieno di bug che devi spegnerlo per evitare brutte sorprese ...
Ognyan,

2
Ho cercato questa risposta per giorni, anche settimane! Sebbene non critico, questo problema è stato nella mia mente, non mi ha dato la pace. Non ho mai pensato che fosse la corsa istantanea a innescare questo. La mia app ha funzionato bene quando è stata avviata tramite adb, ma si è sempre bloccata con l'attesa del runtime ClassNotFound durante l'installazione manuale tramite apk.
Răzvan Barbu,

5
Questa non è la soluzione per me. Avevo disabilitato la corsa istantanea
Terranology il

Dopo aver disabilitato le opzioni. Per favore, riavvia il tuo studio Android
Ashik Abbas,

omg non so perché il colpevole sia la corsa istantanea, ma grazie, amico.
KingKongCoder

63

Ho avuto un problema simile, ecco la mia soluzione:

  1. Fare clic con il tasto destro del mouse sul progetto e selezionare Proprietà .
  2. Seleziona Java Build Path dal menu a sinistra.
  3. Seleziona Ordine ed Esporta scheda .
  4. Dall'elenco assicurarsi che le librerie o i barattoli esterni aggiunti al progetto siano selezionati .
  5. Infine, pulisci il tuo progetto ed eseguilo.

Puoi anche controllare questa risposta.


1
Questa è la soluzione corretta alla domanda. Ho provato questo con il mio gioco libgdx con gli stessi errori trovati sopra. Ho trovato questi errori utilizzando il registro generato con il mio telefono (Samsung Galaxy S6). Una volta applicata questa soluzione, tutti i miei problemi sono stati risolti.

25
Non riesco a trovare Proprietà dal tasto destro del progetto. Forse sono stupido. :(
Zin Min

12
Non riesco a trovare le proprietà, nessuno capisce come navigare alla pagina elencata
Skyler

9
Questa è una soluzione per l'IDE Eclipse. Non esiste un file 'project.properties' predefinito in Android Studio. Può essere creato però.
Bot,

La soluzione fornita è applicabile solo per IDE Eclipse.
mnsalim,

47

Questo sembra essere un problema nel tuo caso. Il percorso relativo della tua attività in manifest non è corretto:

<activity android:name="android.app.POMActivity"

sostituirlo con:

<activity android:name=".POMActivity"

o

<activity android:name="com.irrlicht.example1.POMActivity"

31

La cancellazione dell'app sul dispositivo e la pulizia del progetto funzionano per me


2
Questo ha funzionato anche per me con la reazione nativa. Ho aperto la cartella Android con Android Studio e poi ho creato -> progetto pulito. Ricostruito conreact-native run-android
pinguinos il

Ha fatto lo stesso del commento sopra e ha funzionato! Grazie !
Elegya,

24

Dovrei capire il problema semplicemente vedendo

errori dex

Ma ci è voluta mezza giornata per risolvere il problema.
Risolvo questo seguendo le istruzioni della pagina degli sviluppatori Android: https://developer.android.com/studio/build/multidex.html

Per prima cosa aggiungi questo al file gradle.build:

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'
 }

Quindi estendere la classe Application con la MultiDexApplicationclasse come indicato sul link sopra (o dichiarare la classe application in AndroidManifest.xmlo sovrascrivere la attachBaseContext()funzione se non è possibile estendere la classe application).

Questo è tutto e ha risolto il problema.


1
L'aggiunta di multi-dex è utile solo quando si supera il limite di conteggio dei riferimenti (56k), ed è molto instabile e poco affidabile prima di Lollipop. Questo dovrebbe essere usato per risolvere i problemi come ultima risorsa.
milosmns,

allora quale dovrebbe essere la soluzione secondo te
Akash Bisariya,

Sto solo dicendo che multi-dex causa più problemi di quanti ne possano aiutare, come chiaramente indicato sul sito web degli sviluppatori. Non sarei qui in cerca di una risposta se ne avessi una, vero?
milosmns,

1
Ok grazie per le informazioni, si prega di aggiornare qui se hai trovato una buona soluzione, sarebbe di grande aiuto.
Akash Bisariya,

2
L'aggiunta della linea nelle dipendenze sopra l'ha fatto per me.
gadildafissh,

23

Basta provare Clean Project & Rebuild Project .


1
Nel menu "Crea". Seleziona Build -> Clean Project e poi Build -> Rebuild Project
kangkyu

Ciò implicherebbe che l'app si arresti in modo anomalo solo localmente, ma l'incidente si verifica anche in una versione di rilascio, quindi questa non è davvero una soluzione.
David

22

Questa eccezione può verificarsi anche quando si dispone di una vista personalizzata nel layout in questo modo:

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

e cambi il nome del pacchetto della vista da "com.example" a qualcosa di diverso, ma ti dimentichi di cambiarlo anche nel layout.


Questo è stato utile per un motivo diverso. Controlla la tua ortografia. Avevo un nome di classe errato che causava il problema originale.
Berry Wing,


12

l'ho risolto usando: ./gradlew --stopcommand in android studio terminal. Dopo aver eseguito questo comando, quindi pulire e ricostruire il progetto.


11
  1. elimina la cartella bin
  2. cambia l'ordine dei bibliotecari
  3. pulito e ricostruito

ha funzionato per me.


10

Per chiunque abbia abilitato multidex, scrivere questo

dentro 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 lezione EnableMultiDexcome di seguito

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 in AndroidManifest.xmlscrivi questo className all'interno del tag Application

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

In che modo enableMultiDexinfluisce? Nel mio caso javaMaxHeapSize "4g"non ha aiutato.
CoolMind

@CoolMind È solo una classe di applicazione che si estende MultiDexApplication. È necessario se si desidera utilizzare multidex
Manohar Reddy,

Essere d'accordo. Uso uno dei due MultiDexApplicationo attachBaseContext(vedi developer.android.com/studio/build/multidex ).
CoolMind

8

Ho affrontato questo problema più volte e sono tutti risolti disabilitando Instant Run .


Ho provato molteplici soluzioni, questa piccola cosa ha risolto il problema, incredibile!
FraK,

@FraK, la soluzione più votata contiene questo consiglio. Anche se avevo già deselezionato Instant Run (diversi anni ha portato molti bug).
CoolMind,

7

Non è necessario disporre di una classe di applicazione personalizzata che estenda MultiDexApplication . Invece, possiamo avere questo su AndroidManifest.xml

<application
android:name="android.support.multidex.MultiDexApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

E insieme a questo su build.gradle (Modulo: app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

Grazie.


La modifica del nome dell'applicazione ha funzionato per me quando stavo cercando di eseguire l'app su Android 4.3
h8pathak

6

Quando si utilizza Multidex, quindi provare ad estendere la classe di applicazione con MultiDexAppication invece di Applicazione e sovrascrivere il metodo di seguito richiesto per Android inferiore a 5.0 (poiché il supporto 5.0 e superiore per il multidex)

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

e nelle dipendenze aggiungere questo

compile 'com.android.support:multidex:1.0.1'

Dovremmo ignorare questo metodo se estendiamo da Application. Perché dovremmo scavalcare in un caso di MultiDexAppication?
CoolMind,

4

Basta cambiare il nome della cartella da liba libs,

Quindi vedrai alcuni segni di errore nel tuo progetto, per risolvere questo diritto Fai clic sul progetto>

Properties > Java Build Path > libraries :

Rimuovere tutte biblioteca segni rossi su di esso, poi apply > ok >, dopo che pulire il vostro progetto . TADA vedi la magia :)


il nome della cartella è solo libs
Killer

4

Nel mio caso questo problema è sorto a causa di Kotlin. Nel mio codice esistente c'era una classe che era scritta Kotlin. Ho creato l'app, installata e non appena si è bloccata la prima attività aperta, l'app ha aperto. nel logcat questo errore veniva mostrato. Ho quindi aggiornato la mia versione di Kotlin dal sito Web di Kotlin nel file gradle dell'app. Costruisci di nuovo l'app e poi ha funzionato bene.


Wow, ho un progetto del 99% -Kotlin Cosa fare? :)
CoolMind

Puoi controllare, con la versione di Kotlin compatibile con il tuo Android Studio sottostante. È solo una supposizione. dai un'occhiata
Harry. Neem

Ho AS 3.3.1 e Kotlin 1.3.21. Sono le ultime stabili. Mi dispiace, suppongo, tutte le soluzioni descritte sopra e sotto non sono adatte alla mia situazione.
CoolMind

4

Un possibile motivo potrebbe essere il percorso errato dell'attività nel file Apps AndroidManifest.xml. Registra l'attività con nel tuo AndroidManifest.xml con il percorso relativo completo come di seguito.

<activity android:name="<full_path>.ActivityName" />

3

dopo aver provato le risposte fornite, ho scoperto un altro motivo per la stessa eccezione, che ho dovuto aggiungere la libreria che sto usando manualmente nella mia libreria principale tramite

Right click on my main library > 
Properties > 
Android > 
Go to the very bottom of the screen and click (Add) > 
Select my other library that caused the crash >
Apply

prima di questa soluzione, ho usato "Fix Project setup" all'interno del file .java in eclipse, ma questo non ha funzionato, quindi ho dovuto aggiungerlo manualmente qui e ha funzionato


3

Stavo ottenendo questo crash solo su dispositivi Samsung Lollipop e questa soluzione ha funzionato per me.

dexOptions {
     preDexLibraries false
}

Sto pubblicando questa risposta qui perché questa domanda è attualmente il risultato di ricerca con il punteggio più alto su Google per questo arresto e nessuna delle risposte sopra ha funzionato per me.


Non mi ha aiutato (Samsung Galaxy S4, Android 5.0.1).
CoolMind,

2

La seguente soluzione ha funzionato per me ...

Ho provato tutto quanto sopra menzionato ma non ho ancora eseguito la mia app. Ho un'app Reazione-nativa in esecuzione sull'ultima versione di Gradle 4+ e Android Studio.

Ho avuto il problema per cui se avessi eseguito run-android reattivo nativo, non riusciva con il problema dicendo che non era in grado di trovare la classe MainApplication ... cioè ClassNotFoundException

Sono stato in grado di risolvere il problema quando ho aggiornato il mio gradle.properties per utilizzare il compilatore D8.

Ho aggiunto:

android.enableD8 = true

ai miei gradle.properties

Dettagli documento qui: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio 3.1+ utilizza questo dex complier per impostazione predefinita
Lennon Spirlandelli,

2

Ashik abbas answer (disabilita Instant Run ) funziona per me, ma ho bisogno di Instant Run , finalmente ho trovato la soluzione che mi è stata utile. basta disabilitare minifyEnabled . vai a build.gradle (Modulo: app) nel blocco di debug e disabilita minifyEnabled :

debug {
            minifyEnabled false

        }

1

Secondo il mio undertading ottengo il problema dopo l'aggiornamento di Android Studio 2.1 a 2.3 a causa della funzionalità istantanea la mia applicazione non verrà eseguita quando copio l'apk dall'output e inserisco la sdcard. Per questo problema ho creato l'apk dall'opzione build, quindi crea l'apk in Android Studio.


1

Se sei abilitato minifyEnablede shrinkResourcesvero nel file di gradle dell'app. Devi aggiungere la seguente riga nel proguard-rules.profile

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

perché la minificazione è stata rimossa alcune classi importanti nel nostro file apk.


Questa non è una buona soluzione perché esclude tutti i file di origine dalla riduzione delle risorse. Escludere solo solo i file che sono realmente necessari, altrimenti si gonfia la dimensione dell'apk.
Yannick,

1

ho avuto questo problema in precedenza e i commenti qui sono stati di aiuto in passato, ma questa volta no. ho controllato la mia configurazione proguard e ho rimosso le seguenti righe e poi ha funzionato in modo che proguard possa avere a che fare con questo errore:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

1

Nel mio caso, ho usato la vecchia libreria dello spazio dei nomi mentre il mio progetto era impostato usando androidx one.

La soluzione era quello di sostituire android.support.design.widget.BottomNavigationViewcomponenti con quella giusta per fuggire dalla libreria di supporto: com.google.android.material.bottomnavigation.BottomNavigationView.


1

nel mio caso, definisco l'attività Manifest.xmle ho dimenticato di crearne una activity. Così ho creato l'attività e la ho definita manifeste il mio errore è stato risolto!



0

Per me il problema è apparso dopo aver creato un APK firmato. Per risolverlo, ho generato un nuovo apk di debug usando APK Run / Build. Successivamente, Esegui (cmd + r) funziona di nuovo senza questo errore.


0

Stavo affrontando lo stesso problema. Ho provato tutto il possibile per un giorno, ma niente ha funzionato. La dipendenza che stava causando il problema stava usando la compilazione inferiore sdk, target sdk e min sdk. Ho creato il modulo libreria per il progetto, copiato tutte le fonti e abbinato le versioni sdk con le versioni sdk dell'applicazione. E infine ha funzionato come un fascino.


0

Ho avuto lo stesso errore e alcune risposte mi inducono in errore su un problema da principiante. Ho avuto il pacchetto sbagliato nel mio descrittore di visualizzazione personalizzato come di seguito. Spero che aiuti qualcuno.

<com.my.app.wrong.package.MyActivity
    android:id="@+id/myActivity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="8dp"
    android:gravity="left" />
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.