java.lang.ClassNotFoundException: Non ha trovato la classe sul percorso: dexpathlist

Karthik Sivam 08/21/2017. 13 answers, 93.384 views
java android android c++ android-ndk android-ndk

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

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

mentre gestisco il mio progetto.

Ecco il mio file main.cpp:

#include #include #include #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:

...                 

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

4 Comments
Siddharth_Vyas 03/14/2014
Stai usando file jar esterni?
Karthik Sivam 03/14/2014
@SiddharthVyas No, non sto usando file jar esterni in questo.
1 Igor Ganapolsky 08/09/2016
La tua applicazione è multi-dexed? Se è così, allora questo spiega il problema.
j2emanue 07/05/2017
quando ho fatto un apk firmato questo errore non è accaduto. solo debug

13 Answers


mnsalim 05/23/2017.

Ho avuto un problema simile, ecco la mia soluzione:

  1. Fare clic con il tasto destro sul progetto e selezionare Properties .
  2. Seleziona Java Build Path dal menu a sinistra.
  3. Seleziona la scheda Order and Export .
  4. Dall'elenco assicurati che le librerie o i jar esterni che hai aggiunto al tuo progetto siano checked .
  5. Finalmente, pulisci il tuo progetto ed esegui.

Puoi anche controllare questa risposta.

4 comments
1 FoxDonut 11/06/2016
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.
2 Zin Min 03/25/2017
Non riesco a trovare le proprietà dal clic destro del progetto. Potrei essere io stupido :(
2 user3036320 04/19/2017
per favore mostra la soluzione Android Studio ...
2 Skyler 07/08/2017
Non riesco a trovare le proprietà, nessuno capisce come navigare verso la pagina elencata

Sushil 03/14/2014.

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

 

sostituirlo con:

 

o

 
1 comments
1 Karthik Sivam 03/14/2014
Ho provato entrambi, mostra la stessa eccezione.

Akash Bisariya 03/06/2017.

Dovrei capire il problema semplicemente vedendo

dex errors

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

Per prima cosa aggiungilo 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 (o dichiarare la classe dell'applicazione in AndroidManifest.xml o override attachBaseContext() ) con la classe MultiDexApplication come indicato sul link precedente.

Questo è tutto e ha risolto il problema.

4 comments
1 milosmns 08/30/2016
L'aggiunta di multi-dex è utile solo quando si supera il limite del conteggio dei riferimenti (56k) ed è very instabile e very inaffidabile prima di Lollipop. Questo dovrebbe essere usato per risolvere i problemi come ultima risorsa.
Akash Bisariya 08/30/2016
allora quale dovrebbe essere la soluzione secondo te
milosmns 08/30/2016
Sto solo dicendo che il multi-dex causa più problemi di quanto aiuti, il che è chiaramente indicato sul sito web dello sviluppatore. Non sarei qui a cercare una risposta se ne avessi uno, vero?
Akash Bisariya 08/30/2016
Ok grazie per le informazioni, per favore aggiorna qui se hai trovato una buona soluzione, sarebbe di grande aiuto.

V. Kalyuzhnyu 07/07/2016.

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


crazyjune 06/13/2014.
  1. elimina la cartella bin
  2. cambia l'ordine delle librerie
  3. pulire e ricostruire

ha funzionato per me


Ali Gürelli 10/13/2016.

L'ho risolto usando: ./gradlew --stop comando nel terminale di Android Studio. Dopo aver eseguito questo comando, pulire e ricostruire il progetto.


Redman 01/05/2017.

Per chiunque abbia abilitato il multidex scrivi 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 EnableMultiDex come 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 in AndroidManifest.xml scrivere questo className all'interno del tag Application

 

Ashik Abbas 07/26/2017.

Ho provato tutte le opzioni possibili ma il risultato è zero. Finalmente ho trovato la soluzione corretta che è utile per me. Basta andare su Disattiva esecuzione immediata Vai su File -> Impostazioni -> Crea, Esegui, Distribuzione -> Esecuzione istantanea -> Deseleziona la casella di controllo per l'esecuzione immediata . Esegui la tua app una volta e questo file apk funziona correttamente ..


Walking Code 05/05/2014.

Basta cambiare il nome della cartella da lib a libs ,

Quindi vedrai alcuni segni di errore nel tuo progetto, per risolvere questo dirittoClicca su progetto>

Properties > Java Build Path > libraries :

Rimuovi tutta la libreria con i segni rossi su di essa, quindi apply > ok > dopo di che clean your project . TADA vedere la magia :)

1 comments
Shubham 10/27/2015
il nome della cartella è solo libs

Tere Bentikh 09/29/2015.

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

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 la "Fix Project setup" dal file .java in eclipse, ma questo non ha funzionato, quindi ho dovuto aggiungerlo manualmente qui e ha funzionato


dees91 11/21/2016.

Se ricevi questo errore dopo aver rimosso alcune dipendenze gradle, controlla il manifest e assicurati di aver rimosso tutte le voci corrispondenti a tale dipendenza.

1 comments
Petter Friberg 11/21/2016
Si prega di non aggiungere la stessa risposta a più domande. Rispondi al migliore e contrassegna il resto come duplicato. Vedi È accettabile aggiungere una risposta duplicata a diverse domande?

Quando si utilizza il multidex, provare ad estendere la classe dell'applicazione con MultiDexAppication anziché Applicazione e sovrascrivere il metodo seguente richiesto per Android inferiore a 5.0 (perché 5.0 e versioni successive supportano il multidex)

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

e nelle dipendenze aggiungi questo

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

Shivegeeky 06/23/2017.

Come per il mio understading ottengo il problema dopo l'aggiornamento di Android Studio 2.1 a 2.3 a causa della funzionalità immediata la mia applicazione non verrà eseguita quando copio l'apk dall'output e inserito nella sdcard. Per questo problema costruisco l'apk dall'opzione build do apk build in Android Studio.

Related questions

Hot questions

Language

Popular Tags