java.lang.ClassNotFoundException: Klasse im Pfad: dexpathlist wurde nicht gefunden

139

Ich arbeite derzeit an einem Projekt, in dem ich rein natives ndk verwenden muss. Es hat funktioniert, wenn ich versuche, ein Beispiel aus der Irrlicht-Engine-Quelle auszuführen. Dann versuche ich, es in meinem Projekt nach dem gleichen Format wie in diesem Beispiel zu verwenden. Aber ich habe:

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

während ich mein Projekt ausführe.

Hier ist meine main.cpp-Datei:

#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");
}

#endif

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)

Und ich habe den Aktivitätsnamen in AndroidManifest.xml angegeben:

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

Was ist der Fehler, den ich hier mache? Ich werde den vollständigen Code posten, wenn dies erforderlich ist.

Karthik Sivam
quelle
1
Verwenden Sie externe JAR-Dateien?
Siddharth_Vyas
@SiddharthVyas Nein, ich verwende hier keine externen JAR-Dateien.
Karthik Sivam
1
Ist Ihre Anwendung multidexed? Wenn ja, dann erklärt das das Problem.
IgorGanapolsky
als ich eine signierte apk gemacht habe ist dieser fehler nicht aufgetreten. nur debuggen
j2emanue
Haben Sie eine funktionierende Lösung gefunden?
Benobab

Antworten:

84

Ich habe alle möglichen Optionen ausprobiert, aber das Ergebnis ist Null. Endlich habe ich die richtige Lösung gefunden, die für mich hilfreich ist. Gehen Sie einfach zum Deaktivieren des Sofortlaufs. Gehen Sie zu Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Sofortiger Lauf -> Deaktivieren Sie das Kontrollkästchen für den Sofortlauf . Führen Sie Ihre App einmal aus und diese APK-Datei funktioniert ordnungsgemäß.

Ashik Abbas
quelle
11
Dies ist die richtige Antwort für Android Studio. Ich kann nicht glauben, dass Instant Run immer noch so fehlerhaft ist, dass man es ausschalten muss, um böse Überraschungen zu vermeiden ...
Ognyan
2
Ich habe seit Tagen, sogar Wochen nach dieser Antwort gesucht! Obwohl nicht kritisch, war dieses Problem in meinem Hinterkopf und gab mir keinen Frieden. Ich hätte nie gedacht, dass Instant Run derjenige ist, der dies auslöst. Meine App funktionierte einwandfrei, als sie über adb gestartet wurde, stürzte jedoch immer mit der Laufzeiterwartung von ClassNotFound ab, wenn sie manuell über apk installiert wurde.
Răzvan Barbu
5
Das ist nicht die Lösung für mich. Ich hatte den
Sofortlauf
Nach dem Deaktivieren der Optionen. Bitte starten Sie Ihr Android-Studio neu
Ashik Abbas
omg ich weiß nicht, warum sofortiger Lauf der Schuldige ist, aber es ist in der Tat, danke Mann.
KingKongCoder
63

Ich hatte ein ähnliches Problem, hier ist meine Lösung:

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften .
  2. Wählen Sie im Menü links die Option Java Build Path .
  3. Wählen Sie die Registerkarte Bestellen und Exportieren .
  4. Aus der Liste sicherstellen , dass die Bibliotheken oder externe Gläser Sie zu Ihrem Projekt hinzugefügt werden geprüft .
  5. Reinigen Sie abschließend Ihr Projekt und führen Sie es aus.

Sie können diese Antwort auch überprüfen .

mnsalim
quelle
1
Dies ist die richtige Lösung für die Frage. Ich habe dies mit meinem libgdx-Spiel mit den gleichen Fehlern wie oben getestet. Ich habe diese Fehler mithilfe des mit meinem Telefon (Samsung Galaxy S6) erstellten Protokolls gefunden. Nachdem ich diese Lösung angewendet hatte, waren alle meine Probleme gelöst.
25
Ich kann Eigenschaften nicht mit der rechten Maustaste auf das Projekt finden. Vielleicht bin ich dumm. :(
Zin Min
12
Ich kann auch keine Eigenschaften finden, jemand findet heraus, wie man zur aufgelisteten Seite navigiert
Skyler
9
Dies ist eine Lösung für die Eclipse-IDE. In Android Studio gibt es keine Standarddatei 'project.properties'. Es kann jedoch erstellt werden.
Bot
Die bereitgestellte Lösung gilt nur für Eclipse IDE.
Mnnsalim
47

Dies scheint in Ihrem Fall ein Problem zu sein. Der relative Pfad Ihrer Aktivität im Manifest ist nicht korrekt:

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

Ersetzen Sie dies durch:

<activity android:name=".POMActivity"

oder

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

Das Löschen der App auf dem Gerät und das Reinigen des Projekts funktioniert für mich

Vlad
quelle
2
Dies funktionierte auch bei mir mit React Native. Ich habe den Android-Ordner mit Android Studio geöffnet und dann ein Projekt erstellt -> bereinigen. Wiederaufgebaut mitreact-native run-android
pinguinos
Habe das gleiche wie oben kommentiert und es hat funktioniert! Vielen Dank !
Elegya
24

Ich sollte das Problem verstehen, indem ich nur sehe

Dex-Fehler

Es dauerte jedoch einen halben Tag, um das Problem zu beheben.
Ich behebe dies, indem ich den Anweisungen der Android-Entwicklerseite folge: https://developer.android.com/studio/build/multidex.html

Fügen Sie dies zuerst der Datei gradle.build hinzu:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Erweitern Sie dann die Anwendungsklasse mit der MultiDexApplicationKlasse, wie unter dem obigen Link angegeben (oder deklarieren Sie die Anwendungsklasse in der Funktion AndroidManifest.xmloder überschreiben Sie die attachBaseContext()Funktion, wenn dies nicht möglich ist, um die Anwendungsklasse zu erweitern).

Das ist alles und es hat das Problem gelöst.

Akash Bisariya
quelle
1
Das Hinzufügen von Multi-Dex ist nur dann sinnvoll, wenn Sie das Referenzzähllimit (56 KB) überschritten haben. Vor Lollipop ist es sehr instabil und sehr unzuverlässig. Dies sollte verwendet werden, um Probleme als letztes Mittel zu beheben.
Milosmns
dann, was sollte die Lösung für Sie sein
Akash Bisariya
Ich sage nur, dass Multi-Dex mehr Probleme verursacht als hilft, was auf der Entwickler-Website klar angegeben ist. Ich wäre nicht hier, um nach einer Antwort zu suchen, wenn ich eine hätte, oder?
Milosmns
1
Ok, danke für die Info. Bitte hier aktualisieren, wenn Sie eine gute Lösung gefunden haben, wäre dies eine große Hilfe.
Akash Bisariya
2
Das Hinzufügen der Zeile in den obigen Abhängigkeiten hat es für mich getan.
Gadildafissh
23

Versuchen Sie einfach Clean Project & Rebuild Project .

nicolas asinovich
quelle
1
Unter "Build" Menü. Wählen Sie Erstellen -> Projekt
bereinigen
Dies würde bedeuten, dass die App nur lokal abstürzt, obwohl der Absturz auch in einer Release-Version auftritt. Dies ist also keine wirkliche Lösung.
David
22

Diese Ausnahme kann auch auftreten, wenn Sie eine benutzerdefinierte Ansicht in Ihrem Layout wie folgt haben:

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

und Sie ändern den Paketnamen der Ansicht von "com.example" in einen anderen, vergessen jedoch, ihn auch im Layout zu ändern.

petrnohejl
quelle
Dies war aus einem anderen Grund hilfreich. Überprüfe deine Rechtschreibung. Ich hatte einen falsch geschriebenen Klassennamen, der das ursprüngliche Problem verursachte.
Berry Wing
12

Ich löste es mit: ./gradlew --stopBefehl im Android Studio Terminal. Nachdem Sie diesen Befehl ausgeführt haben, bereinigen Sie das Projekt und erstellen Sie es neu.

Ali Gürelli
quelle
11
  1. Löschen Sie den Ordner bin
  2. Ändern Sie die Reihenfolge der Bibliotheken
  3. reinigen und wieder aufbauen

arbeitete für mich.

verrückter Juni
quelle
10

Für jeden, der Multidex aktiviert hat, schreiben Sie dies

innerhalb von 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'
}

schreibe eine Klasse EnableMultiDexwie unten

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();

    }
}

und AndroidManifest.xmlschreiben Sie diesen Klassennamen in das Application-Tag

 <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">
Manohar Reddy
quelle
Wie wirkt sich enableMultiDexdas aus? In meinem Fall javaMaxHeapSize "4g"hat nicht geholfen.
CoolMind
@CoolMind Es ist nur eine Anwendungsklasse, die erweitert wird MultiDexApplication. Es ist notwendig, wenn Sie Multidex
Manohar Reddy
Zustimmen. Ich benutze entweder MultiDexApplicationoderattachBaseContext (siehe developer.android.com/studio/build/multidex ).
CoolMind
8

Ich habe dieses Problem mehrmals gesehen und sie wurden alle durch Deaktivieren von Instant Run behoben .

Mohamed Nageh
quelle
Versuchte mehrere Lösungen, dieses kleine Ding löste das Problem, unglaublich!
FraK
@FraK, die am besten bewertete Lösung enthält diesen Rat. Obwohl ich Instant Run bereits deaktiviert hatte (mehrere Jahre hat es viele Fehler gebracht).
CoolMind
7

Wir benötigen keine angepasste Anwendungsklasse , die MultiDexApplication erweitert . Stattdessen können wir dies auf AndroidManifest.xml haben

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

Und dazu auf build.gradle (Modul: App),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

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

Vielen Dank.

Abdul Gaffar
quelle
Das Ändern des Anwendungsnamens funktionierte für mich, als ich versuchte, die App auf Android 4.3
h8pathak
6

Wenn Sie Multidex verwenden, versuchen Sie, Ihre Anwendungsklasse mit MultiDexAppication anstelle von Application zu erweitern, und überschreiben Sie die für Android unter 5.0 erforderliche Methode (da 5.0 und höher Multidex unterstützt).

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

und in Abhängigkeiten fügen Sie dies hinzu

compile 'com.android.support:multidex:1.0.1'
kabore abdoul mohamine
quelle
Wir sollten diese Methode überschreiben, wenn wir von erweitern Application. Warum sollten wir in einem Fall von überschreiben MultiDexAppication?
CoolMind
4

Ändern Sie einfach Ihren Ordnernamen von libin libs,

Dann sehen Sie einige Fehlermarkierungen in Ihrem Projekt, um dieses Problem zu beheben. Klicken Sie auf Projekt>

Properties > Java Build Path > libraries ::

Entfernen Sie alle die Bibliothek mit roten Markierungen auf sie, dann apply > ok >nach diesem sauberen Projekt . TADA sehen die Magie :)

hemantsb
quelle
Ordnername ist nur libs
Killer
4

In meinem Fall trat dieses Problem aufgrund von Kotlin auf. In meinem vorhandenen Code gab es eine Klasse, die Kotlin geschrieben wurde. Ich habe die App erstellt, sie installiert und sobald die erste Aktivität geöffnet wurde, stürzte die App ab. Im Logcat wurde dieser Fehler angezeigt. Ich habe dann meine Kotlin-Version von der Kotlin-Website in einer App-Gradle-Datei aktualisiert. Erstellen Sie die App erneut und es hat dann gut funktioniert.

Harry .Naeem
quelle
Wow, ich habe ein 99% -Kotlin-Projekt. Was tun? :)
CoolMind
Können Sie bitte überprüfen, ob die Kotlin-Version mit Ihrem zugrunde liegenden Android Studio kompatibel ist? Es ist nur eine Vermutung. werfen Sie einen Blick
Harry .Naeem
Ich habe AS 3.3.1 und Kotlin 1.3.21. Sie sind zuletzt stabil. Entschuldigung, ich nehme an, alle oben und unten beschriebenen Lösungen sind nicht für meine Situation geeignet.
CoolMind
4

Ein möglicher Grund wäre der falsche Pfad der Aktivität in der Datei Apps AndroidManifest.xml. Registrieren Sie die Aktivität mit in Ihrer AndroidManifest.xml mit dem vollständigen relativen Pfad wie unten.

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

Nachdem ich die gegebenen Antworten ausprobiert hatte, fand ich einen weiteren Grund für dieselbe Ausnahme heraus, dass ich die Bibliothek, die ich manuell verwende, zu meiner Hauptbibliothek hinzufügen musste

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

Vor dieser Lösung habe ich das "Fix Project Setup" aus der .java-Datei in Eclipse verwendet, aber das hat nicht funktioniert, also musste ich es hier manuell hinzufügen und es hat funktioniert

Ahmed Adel Ismail
quelle
3

Ich habe diesen Absturz nur auf Samsung Lollipop-Geräten bekommen und diese Lösung hat bei mir funktioniert.

dexOptions {
     preDexLibraries false
}

Ich poste diese Antwort hier, da diese Frage derzeit das bestplatzierte Suchergebnis bei Google für diesen Absturz ist und keine der oben genannten Antworten für mich funktioniert hat.

blinkmacalahan
quelle
Es hat mir nicht geholfen (Samsung Galaxy S4, Android 5.0.1).
CoolMind
2

Die folgende Lösung hat bei mir funktioniert ...

Ich habe alles oben Genannte ausprobiert, aber meine App immer noch nicht zum Laufen gebracht. Ich habe eine reaktionsnative App, die auf der neuesten Version von Gradle 4+ und Android Studio ausgeführt wird.

Ich hatte das Problem, dass, wenn ich reag-native run-android ausführen, es mit dem Problem fehlschlug, dass es nicht in der Lage ist, die MainApplication-Klasse zu finden ... dh ClassNotFoundException

Ich konnte das Problem beheben, als ich meine gradle.properties für die Verwendung des Compilers D8 aktualisierte.

Ich fügte hinzu:

android.enableD8 = true

zu meinen gradle.properties

Doc Details hier: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

nkadu1
quelle
1
Das Android Studio 3.1+ verwendet diesen Dex-Complier standardmäßig
Lennon Spirlandelli
2

Ashik abbas Antwort ( Instant Run deaktivieren ) funktioniert für mich, aber ich brauche Instant Run , schließlich habe ich eine Lösung gefunden, die für mich hilfreich ist. Deaktivieren Sie einfach minifyEnabled . Gehen Sie im Debug- Block zu build.gradle (Modul: App) und deaktivieren Sie minifyEnabled :

debug {
            minifyEnabled false

        }
hofs
quelle
1

Nach meinem Verständnis bekomme ich das Problem nach dem Update von Android Studio 2.1 auf 2.3 aufgrund der Sofortfunktion, die meine Anwendung nicht ausführen wird, wenn ich die apk von der Ausgabe kopiere und auf die SD-Karte lege. Für dieses Problem baue ich die apk aus Build-Option, baue apk in Android Studio.


quelle
1

Wenn Sie in Ihrer App-Gradle-Datei aktiviert minifyEnabledund shrinkResourceswahr sind. Sie müssen die folgende Zeile in die proguard-rules.proDatei einfügen

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

weil die Minimierung entfernt wurde, sind einige wichtige Klassen in unserer APK-Datei enthalten.

Naveen Kumar M.
quelle
Dies ist keine gute Lösung, da alle Ihre Quelldateien vom Verkleinern der Ressourcen ausgeschlossen werden. Schließen Sie stattdessen nur die Dateien aus, die wirklich notwendig sind, andernfalls erhöhen Sie Ihre Apk-Größe.
Yannick
1

Ich hatte dieses Problem schon einmal und die Kommentare hier haben in der Vergangenheit geholfen, aber diesmal nicht. Ich überprüfte meine proguard Konfiguration und i entfernt die folgenden Zeilen und dann funktionierte es so proguard etwas haben kann , mit diesem Fehler zu tun:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers
j2emanue
quelle
1

In meinem Fall habe ich die alte Namespace-Bibliothek verwendet, während mein Projekt unter Verwendung von AndroidX One eingerichtet wurde.

Die Lösung bestand darin, die android.support.design.widget.BottomNavigationViewKomponente durch die richtige zu ersetzen , um aus der Support-Bibliothek zu entkommen : com.google.android.material.bottomnavigation.BottomNavigationView.

Andrii Artamonov
quelle
1

In meinem Fall definiere ich die Aktivität in Manifest.xmlund habe vergessen, eine zu erstellen activity. Also habe ich Activity erstellt und definiert manifestund mein Fehler behoben!

Sana Ebadi
quelle
0

Wenn Sie diesen Fehler nach dem Entfernen einer Gradle-Abhängigkeit erhalten, überprüfen Sie Ihr Manifest und stellen Sie sicher, dass Sie alle Einträge entfernt haben, die dieser Abhängigkeit entsprechen.

dees91
quelle
Bitte fügen Sie nicht dieselbe Antwort auf mehrere Fragen hinzu. Beantworten Sie die beste Frage und markieren Sie den Rest als Duplikate. Siehe Ist es akzeptabel, mehrere Fragen doppelt zu beantworten?
Petter Friberg
0

Für mich trat das Problem auf, nachdem ich eine signierte APK erstellt hatte. Um das Problem zu beheben, habe ich mit Run / Build APK eine neue Debug-Apk generiert. Danach funktioniert Run (cmd + r) wieder ohne diesen Fehler.

passatgt
quelle
0

Ich stand vor dem gleichen Problem. Ich habe einen Tag lang alles Mögliche versucht, aber nichts hat funktioniert. Die Abhängigkeit, die das Problem verursachte, war die Verwendung von Lower Compile SDK, Target SDK und Min SDK. Ich habe ein Bibliotheksmodul für das Projekt erstellt, alle Quellen kopiert und die SDK-Versionen mit den Anwendungs-SDK-Versionen abgeglichen. Und schließlich funktionierte es wie ein Zauber.

PK Gupta
quelle
0

Ich hatte den gleichen Fehler und einige Antworten führen mich zu einem Neulingsproblem in die Irre. Ich hatte das falsche Paket in meinem benutzerdefinierten Ansichtsdeskriptor wie unten. Ich hoffe es hilft jemandem.

<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" />
Lauksas
quelle