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.


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äß.


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 .


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"

31

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


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.


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 .


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.


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.


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

arbeitete für mich.


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

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 .


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.


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'

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 :)


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.


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

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


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.


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


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

        }

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.


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.


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

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.


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!



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.


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.


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" />
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.