java.lang.ClassNotFoundException: Nie znaleziono klasy na ścieżce: dexpathlist

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

Obecnie pracuję nad projektem, w którym muszę używać czysto natywnego ndk. To zadziałało, gdy próbowałem uruchomić przykład ze świata silnika Irrlicht. Następnie próbuję go użyć w moim projekcie, zgodnie z tym samym formatem tego przykładu. Ale mam:

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

podczas uruchamiania mojego projektu.

Oto mój plik 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");
} 

#endif

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

I podałem nazwę działania w AndroidManifest.xml:

...                 

Jaki błąd tu robię? W razie potrzeby opublikuję pełny kod.

4 Comments
Siddharth_Vyas 03/14/2014
Czy używasz zewnętrznych plików jar?
Karthik Sivam 03/14/2014
@SiddharthVyas Nie, nie używam zewnętrznych plików jar.
1 Igor Ganapolsky 08/09/2016
Czy twoja aplikacja jest wieloraka? Jeśli tak, to wyjaśnia problem.
j2emanue 07/05/2017
kiedy zrobiłem podpisany plik APK, ten błąd się nie wydarzył. po prostu debuguj

13 Answers


mnsalim 05/23/2017.

Miałem podobny problem, oto moje rozwiązanie:

  1. Kliknij projekt prawym przyciskiem myszy i wybierz Properties .
  2. Wybierz opcję Java Build Path z menu po lewej stronie.
  3. Wybierz kartę Order and Export .
  4. Z listy sprawdź, czy biblioteki lub słoiki zewnętrzne dodane do projektu są checked .
  5. Na koniec wyczyść projekt i uruchom go.

Możesz również sprawdzić odpowiedź.

4 comments
1 FoxDonut 11/06/2016
To jest poprawne rozwiązanie tego pytania. Testowałem to z moją grą libgdx z tymi samymi błędami, które znaleziono powyżej. Znalazłem te błędy, używając dziennika wygenerowanego za pomocą mojego telefonu (samsung galaxy S6). Po zastosowaniu tego rozwiązania wszystkie moje problemy zostały rozwiązane.
2 Zin Min 03/25/2017
Nie mogę znaleźć właściwości z prawego kliknięcia projektu. Być może jestem głupi. :(
2 user3036320 04/19/2017
pokaż Android Studio rozwiązanie ...
2 Skyler 07/08/2017
Nie mogę również znaleźć właściwości, nikt nie wie, w jaki sposób przejść do podanej strony

Sushil 03/14/2014.

To wydaje się być problemem w twoim przypadku. Względna ścieżka aktywności w manifeście nie jest poprawna:

 

zastąp to:

 

lub

 
1 comments
1 Karthik Sivam 03/14/2014
Próbowałem obu, pokazuje ten sam wyjątek.

Akash Bisariya 03/06/2017.

Powinienem zrozumieć problem, po prostu widząc

dex errors

Ale rozwiązanie problemu zajęło pół dnia.
Naprawiam to, śledząc instrukcje strony dla programistów Androida: https://developer.android.com/studio/build/multidex.html

Najpierw dodaj to do pliku gradle.build:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Następnie rozszerz klasę aplikacji (lub zadeklaruj klasę aplikacji w AndroidManifest.xml lub override attachBaseContext() ) klasą MultiDexApplication zgodnie z instrukcjami MultiDexApplication powyżej.

To wszystko i rozwiązało problem.

4 comments
1 milosmns 08/30/2016
Dodanie multi-dex jest przydatne tylko wtedy, gdy przekroczysz limit licznika referencyjnego (56k), i jest very niestabilny i very zawodny przed Lollipopem. Powinno to zostać wykorzystane do rozwiązania problemów w ostateczności.
Akash Bisariya 08/30/2016
to jakie powinno być rozwiązanie według ciebie
milosmns 08/30/2016
Po prostu mówię, że multi-deks powoduje więcej problemów, niż pomaga, co jest wyraźnie zaznaczone na stronie programisty. Nie szukałbym odpowiedzi, gdybym ją miał, prawda?
Akash Bisariya 08/30/2016
OK, dzięki za informacje, proszę zaktualizować tutaj, jeśli znalazłeś dobre rozwiązanie, byłoby to świetną pomocą.

V. Kalyuzhnyu 07/07/2016.

Usunięcie aplikacji na urządzeniu i oczyszczenie projektu działa dla mnie


crazyjune 06/13/2014.
  1. usuń folder bin
  2. zmienić kolejność bibliotek
  3. oczyść i odbuduj

pracował dla mnie.


Ali Gürelli 10/13/2016.

Rozwiązałem go, używając: ./gradlew --stop polecenie ./gradlew --stop w androidowym terminalu studyjnym. Po wykonaniu tego polecenia wyczyść i przebuduj projekt.


Redman 01/05/2017.

Dla każdego, kto ma multidex, napisz to

wewnątrz 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'
} 

napisz klasę EnableMultiDex jak poniżej

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

    }
} 

iw AndroidManifest.xml wpisz tę className wewnątrz znacznika aplikacji

 

Ashik Abbas 07/26/2017.

Wypróbowałem wszystkie możliwe opcje, ale wynik wynosi zero. W końcu znalazłem poprawne rozwiązanie, które jest dla mnie pomocne. Po prostu przejdź, aby wyłączyć Instant Run Przejdź do Plik -> Ustawienia -> Tworzenie, Wykonanie, Wdrażanie -> Natychmiastowy przebieg -> Odznacz pole wyboru, aby uruchomić natychmiast . Uruchom aplikację raz, a plik APK działa poprawnie.


Walking Code 05/05/2014.

Wystarczy zmienić nazwę folderu z lib na libs ,

Następnie pojawi się kilka znaków błędu w projekcie, aby rozwiązać ten problemKliknij na projekt>

Properties > Java Build Path > libraries :

Usuń całą bibliotekę z czerwonymi znacznikami, a następnie apply > ok > po tym jak clean your project . TADA widzę magię :)

1 comments
Shubham 10/27/2015
nazwa folderu to tylko biblioteki

Tere Bentikh 09/29/2015.

po tym, jak wypróbowałem podane odpowiedzi, odkryłem inny powód tego samego wyjątku, że musiałem dodać bibliotekę, której używam ręcznie do mojej głównej biblioteki przez

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 

przed tym rozwiązaniem użyłem "Ustawiania projektu poprawek" z pliku .java w eclipse, ale to nie działało, więc musiałem dodać to ręcznie tutaj i zadziałało


dees91 11/21/2016.

Jeśli pojawi się ten błąd po usunięciu zależności gradle, sprawdź manifest i upewnij się, że usunąłeś wszystkie wpisy odpowiadające tej zależności.

1 comments
Petter Friberg 11/21/2016
Nie dodawaj tej samej odpowiedzi do wielu pytań. Odpowiedz na najlepszą i oznacz flagę jako duplikaty. Zobacz Czy dopuszczalne jest dodanie duplikowanej odpowiedzi na kilka pytań?

Podczas korzystania z wielościeżkowego, spróbuj rozszerzyć swoją klasę aplikacji za pomocą aplikacji MultiDexAppication zamiast aplikacji i zastąp poniższą metodę wymaganą dla systemu Android poniżej wersji 5.0 (ponieważ obsługa wersji 5.0 i wyższej w środowisku wielodostępnym)

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

i w zależnościach dodaj to

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

Shivegeeky 06/23/2017.

Jak na moje zrozumienie dostaję problem po aktualizacji Android Studio 2.1 do 2.3 ze względu na funkcję natychmiastową moja aplikacja nie będzie działać, gdybym skopiować plik APK z wyjścia i umieścić na sdcard. W tym problemie buduję apk z opcji kompilacji do budowania apk w Androidzie.

Related questions

Hot questions

Language

Popular Tags