java.lang.ClassNotFoundException: Yol üzerinde sınıf bulunamadı: dexpathlist


140

Şu anda tamamen doğal ndk kullanmak zorunda olduğum bir proje üzerinde çalışıyorum. Irrlicht motor kaynağından bir helloworld örneği çalıştırmayı denediğimde işe yaradı. Sonra projemde bu örneğin aynı biçimini kullanarak kullanmayı deneyin. Ama anladım:

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

projemi yürütürken.

İşte benim main.cpp dosya:

#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

Android.mk'de:

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)

Ve AndroidManifest.xml'de Etkinlik adı verdim:

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

Burada yaptığım hata nedir? Gerekirse tam kodu gönderirim.


1
Harici jar dosyası kullanıyor musunuz?
Siddharth_Vyas

@SiddharthVyas Hayır, bu dosyada harici jar dosyaları kullanmıyorum.
Karthik Sivam

1
Başvurunuz çok muhtelif midir? Eğer öyleyse, bu sorunu açıklar.
IgorGanapolsky

İmzalı bir apk yaptığımda bu hata olmadı. sadece hata ayıklama
j2emanue

Çalışan bir çözüm buldunuz mu?
Benobab

Yanıtlar:


84

Tüm olası seçenekleri denedim ama sonuç sıfır. Sonunda benim için yararlı olan doğru çözümü buldum. Anında Çalıştır'ı devre dışı bırakmak için git Dosya -> Ayarlar -> Derleme, Yürütme, Dağıtım -> Anında Çalıştırma -> Anında çalıştırma için onay kutusunun işaretini kaldırın . Uygulamanızı bir kez çalıştırın ve bu apk dosyası düzgün çalışır.


11
Bu, Android Studio için doğru cevaptır. Instant Run hala kötü sürprizlerden kaçınmak için onu kapatmak zorunda kadar uzatmak için inanamıyorum ...
Ognyan

2
Bu cevabı günlerce, hatta haftalarca aradım! Kritik olmasa da, bu konu bana huzur vermemek için aklımın arkasındaydı. Anında koşmanın bunu tetikleyen olduğunu hiç düşünmemiştim. Uygulamam adb ile başlatıldığında iyi çalıştı, ancak apk ile manuel olarak yüklerken her zaman ClassNotFound çalışma zamanı beklentisiyle çöktü.
Răzvan Barbu

5
Benim için çözüm bu değil. Anında koşmayı devre dışı bırakmıştım
Terranology

Sonra seçenekleri devre dışı. Lütfen android stüdyosunu yeniden başlat
Ashik Abbas

Aman tanrım neden anında koşmanın suçlu olduğunu bilmiyorum ama gerçekten, teşekkürler adamım.
KingKongCoder

63

Benzer bir sorunum vardı, işte benim çözümüm:

  1. Projenize sağ tıklayın ve Özellikler'i seçin .
  2. Soldaki menüden Java Derleme Yolu'nu seçin .
  3. Seç Sipariş ve İhracat sekmesini.
  4. Listeden, projenize eklediğiniz kitaplıkların veya harici kavanozların kontrol edildiğinden emin olun .
  5. Son olarak, projenizi temizleyin ve çalıştırın.

Bu yanıtı da kontrol edebilirsiniz .


1
Bu soru için doğru çözümdür. Bunu, yukarıdaki ile aynı hatalarla libgdx oyunumla test ettim. Bu hataları telefonumla (samsung galaxy S6) oluşturulan günlüğü kullanarak buldum. Bu çözümü uyguladıktan sonra tüm sorunlarım çözüldü.

25
Özellikleri projenin sağ tıklamasından bulamıyorum. Belki aptalım. :(
Zin Min

12
Ben de özellikleri bulamıyorum, kimse listelenen sayfaya gitmek için nasıl anlamaya
Skyler

9
Eclipse IDE için bir çözümdür. Android Studio'da varsayılan bir 'project.properties' dosyası yoktur. Yine de oluşturulabilir.
Bot

Sağlanan çözüm sadece Eclipse IDE için geçerlidir.
mnsalim

47

Bu sizin durumunuzda bir sorun gibi görünüyor. Manifestteki faaliyetinizin göreceli yolu doğru değil:

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

bunu aşağıdakilerle değiştir:

<activity android:name=".POMActivity"

veya

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

31

Cihazda uygulamanın silinmesi ve proje temizliği benim için çalışıyor


2
Bu benim için yerli tepki ile de çalıştı. Android klasörünü Android Studio ile açtım ve sonra temiz proje yaptım. Yeniden inşa ilereact-native run-android
pinguinos

Yukarıdaki yorum ile aynı yaptı ve işe yaradı! Teşekkürler !
Elegya

24

Sorunu sadece görerek anlamalıyım

dex hataları

Ancak sorunu düzeltmek yarım gün sürdü.
Bunu android geliştiricileri sayfasının talimatlarını izleyerek düzeltirim: https://developer.android.com/studio/build/multidex.html

Önce bunu gradle.build dosyasına ekleyin:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Ardından Application sınıfını MultiDexApplicationyukarıdaki bağlantıda belirtilen sınıfla genişletin (veya uygulama sınıfını genişletmek mümkün değilse uygulama sınıfını AndroidManifest.xmlveya geçersiz kılma attachBaseContext()işlevini bildirin).

Hepsi bu ve sorunu çözdü.


1
Multi-dex eklemek yalnızca referans sayım sınırını (56k) geçtiğinizde yararlıdır ve Lollipop'tan önce çok kararsız ve çok güvenilmezdir. Bu, son çare olarak sorunları çözmek için kullanılmalıdır.
milosmlar

o zaman size göre çözüm ne olmalı
Akash Bisariya

Sadece multi-dex'in geliştirici web sitesinde açıkça belirtildiği gibi yardımcı olduğundan daha fazla soruna neden olduğunu söylüyorum. Burada olsaydım cevap aramayacaktım, değil mi?
milosmns

1
Tamam bilgi için teşekkürler, iyi bir çözüm bulduysanız lütfen burada güncelleyin, bu çok yardımcı olacaktır.
Akash Bisariya

2
Çizgiyi yukarıdaki bağımlılıklara eklemek benim için yaptı.
gadildafissh

23

Sadece dene Temiz Project & Projesi Yeniden .


1
"Oluştur" menüsünün altında. Seç Yapı -> Temiz Proje ve ardından Yapı -> Project Yeniden
kangkyu

Bu, uygulamanın yalnızca yerel olarak çöktüğü anlamına gelir, bu çökme de bir yayın sürümünde gerçekleşir, bu yüzden bu gerçekten bir çözüm değildir.
David

22

Bu istisna, mizanpajınızda aşağıdaki gibi özel bir görünüm olduğunda da oluşabilir :

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

ve görünümün paket adını "com.example" den farklı bir şeye değiştirirsiniz, ancak düzende de değiştirmeyi unutursunuz.


Bu farklı bir nedenden dolayı yardımcı oldu. Yazımınızı kontrol edin. Orijinal soruna neden olan yanlış yazılmış bir sınıf adı vardı.
Berry Wing


12

./gradlew --stopAndroid stüdyo terminalinde : komutunu kullanarak çözdüm. Bu komutu uyguladıktan sonra projeyi temizleyin ve yeniden oluşturun.


11
  1. bin klasörünü sil
  2. kütüphanecilerin sırasını değiştir
  3. temizle ve yeniden inşa et

benim için çalıştı.


10

Multidex etkinleştiren herhangi biri için bunu yazın

yapı.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'
}

EnableMultiDexaşağıdaki gibi bir sınıf yaz

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

    }
}

ve AndroidManifest.xmlbu className'i Application etiketi içine yazın

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

Nasıl enableMultiDexetkiler? Benim durumumda javaMaxHeapSize "4g"yardım etmedi.
CoolMind

@CoolMind Bu sadece genişleyen bir uygulama sınıfıdır MultiDexApplication. Multidex
Manohar Reddy

Katılıyorum. İkisini de kullanıyorum MultiDexApplicationveya attachBaseContext(bkz. Developer.android.com/studio/build/multidex ).
CoolMind

8

Bu Sorunla birkaç kez karşılaştım ve hepsi Anında Çalıştırmayı devre dışı bırakarak çözüldü .


Birden fazla çözüm denedim, bu küçük şey sorunu çözdü, inanılmaz!
FraK

@FraK, en çok oy alan çözüm bu tavsiyeyi içermektedir. Zaten Instant Run'ın işaretini kaldırmış olmama rağmen (birkaç yıl birçok hata getiriyor).
CoolMind

7

MultiDexApplication öğesini genişleten özelleştirilmiş Uygulama sınıfına ihtiyacımız yok . Bunun yerine, AndroidManifest.xml'de böyle olabiliriz

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

Ve bununla birlikte build.gradle'da (Modül: app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

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

Teşekkürler.


Uygulama adını değiştirmek, android 4.3 üzerinde uygulamayı çalıştırmaya çalışırken benim için çalıştı
h8pathak

6

Multidex kullanırken, uygulama sınıfınızı Uygulama yerine MultiDexAppication ile genişletmeye çalışın ve 5.0'ın altında Android için gerekli olan aşağıdaki yöntemi geçersiz kılın (çünkü 5.0 ve üstü multidex desteği)

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

ve bağımlılıklarda bunu ekleyin

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

Eğer uzanırsak bu yöntemi geçersiz kılmalıyız Application. Bir durumda neden geçersiz kılmalıyız MultiDexAppication?
CoolMind

4

Klasör adınızı yerine olarak libdeğiştirin libs,

Ardından, bu hakkı çözmek için projenizde bazı hata işaretleri göreceksiniz.

Properties > Java Build Path > libraries :

Daha sonra, üzerinde kırmızı işaretleri tüm kütüphane çıkarın apply > ok >bundan sonra temiz projeniz . TADA büyüyü gör :)


klasör adı sadece libs
Katil

4

Benim durumumda bu sorun Kotlin yüzünden ortaya çıktı. Mevcut kodumda Kotlin yazılı bir sınıf vardı. Uygulamayı oluşturdum, yükledim ve ilk etkinlik açıldığında uygulama çöktü. logcat'te bu hata gösteriliyordu. Daha sonra uygulama gradle dosyasında Kotlin web sitesinden Kotlin sürümümü güncelledim. Uygulamayı tekrar oluşturun ve o zaman iyi çalıştı.


Wow,% 99 -Kotlin projem var Ne yapmalıyım? :)
CoolMind

Lütfen kontrol edin, Kotlin sürümü ile temel Android Studio ile uyumludur. Bu sadece bir tahmin. bir göz atın
Harry .Naeem

AS 3.3.1 ve Kotlin 1.3.21 var. En son kararlılar. Üzgünüm, yukarıda ve aşağıda açıklanan tüm çözümler durumuma uygun değil.
CoolMind

4

Olası nedenlerden biri, Apps AndroidManifest.xml dosyasındaki etkinliğin yanlış yolu olabilir. Etkinliği AndroidManifest.xml dosyasına aşağıdaki gibi tam göreli yolla kaydedin.

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

3

verilen cevapları denedikten sonra, aynı istisna için başka bir neden buldum, ben ana kütüphaneye manuel olarak kullanıyorum kütüphaneyi eklemek zorunda kaldım

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

Bu çözümden önce, eclipse .java dosyasından "Fix Project kurulumu" kullanılır, ancak bu işe yaramadı, bu yüzden buraya manuel olarak eklemek zorunda kaldı ve çalıştı


3

Bu çökmeyi sadece Samsung Lollipop cihazlarında alıyordum ve bu çözüm benim için çalıştı.

dexOptions {
     preDexLibraries false
}

Bu soruyu buraya gönderiyorum, çünkü bu soru şu anda bu çökme için Google'da en yüksek sırada yer alan arama sonucu ve yukarıdaki cevapların hiçbiri benim için çalışmadı.


Bana yardımcı olmadı (Samsung Galaxy S4, Android 5.0.1).
CoolMind

2

Aşağıdaki çözüm benim için çalıştı ...

Yukarıda belirtilen her şeyi denedim ama yine de uygulamamın çalışmasını sağlayamadım. Gradle 4+ ve android stüdyosunun en son sürümü üzerinde çalışan yerli tepki uygulaması var.

Eğer reaksiyon-yerli run-android çalıştırırsanız onun MainApplication sınıfını bulamıyor söyleyerek sorun başarısız oldu ... yani ClassNotFoundException sorunu vardı

D8 derleyicisini kullanmak için gradle.properties dosyamı güncellediğimde sorunu çözebildim.

Ekledim:

android.enableD8 = true

benim gradle.properties

Doküman Ayrıntıları burada: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio
3.1+

2

Ashik abbas cevap ( Instant Run'ı devre dışı bırak ) benim için çalışıyor, ancak Instant Run'a ihtiyacım var , sonunda benim için yararlı bir çözüm buldum. minifyEnabled öğesini devre dışı bırakmanız yeterlidir . gidin : (app Modülü) build.gradle içinde ayıklama blok ve devre dışı minifyEnabled :

debug {
            minifyEnabled false

        }

1

Benim understading göre ben güncelleme özelliği nedeniyle android studio 2.1 2.3 sonra sorunu olsun ben çıkış çıktı apk kopyalamak ve sdcard koymak benim uygulama çalışmaz. Bu sorun için inşa seçeneği apk inşa android studio apk yapmak.


1

Uygulama derecelendirme dosyanızda etkin minifyEnabledve shrinkResourcesdoğruysa. Aşağıdaki satırı proguard-rules.prodosyaya eklemelisiniz

- com. paketiniz_adı sınıfını saklayın. ** {*; }

çünkü minimasyon kaldırıldı apk dosyamızdaki bazı önemli sınıflar.


Bu, iyi bir çözüm değildir, çünkü tüm kaynak dosyalarınızı kaynak küçülmesinden hariç tutar. Yalnızca gerçekten gerekli olan dosyaları hariç tutun, aksi takdirde apk boyutunuzu şişirirsiniz.
Yannick

1

daha önce bu sorunu vardı ve burada yorumlar geçmişte yardımcı oldu ama bu sefer olmadı. Proguard yapılandırmamı kontrol ettim ve aşağıdaki satırları kaldırdım ve daha sonra proguard'ın bu hatayla ilgili bir şey yapabileceği şekilde çalıştı:

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

1

Benim durumumda, eski ad alanı kütüphanesini kullandım, projem androidx birinden yararlanarak kuruldu.

Solüsyon değiştirmekti android.support.design.widget.BottomNavigationViewdestek kitaplığından kaçmak için doğru biriyle bileşen: com.google.android.material.bottomnavigation.BottomNavigationView.


1

benim durumumda, etkinliği tanımlarım Manifest.xmlve herhangi bir tane oluşturmayı unuttum activity. Bu yüzden Etkinlik oluşturdum ve onu tanımladım ve hatam manifestçözüldü!



0

Benim için sorun imzalı bir APK oluşturduktan sonra ortaya çıktı. Düzeltmek için, Run / Build APK kullanarak yeni, hata ayıklama apk oluşturdum. Bundan sonra, Çalıştır (cmd + r) bu hata olmadan tekrar çalışır.


0

Aynı sorunla karşı karşıyaydım. Bir gün boyunca mümkün olan her şeyi denedim, ama hiçbir şey işe yaramadı. Soruna neden olan bağımlılık daha düşük derleme sdk, target sdk ve min sdk kullanmaktı. Proje için kütüphane modülü oluşturdum, tüm kaynakları kopyaladım ve sdk sürümlerini uygulama sdk sürümleriyle eşleştirdim. Ve sonunda bir cazibe gibi çalıştı.


0

Aynı hatayla karşılaştım ve bazı cevaplar bir acemi sorununda beni yanlış yönlendiriyor. Özel görünüm tanımlayıcımda aşağıdaki gibi yanlış paket vardı. Umarım birine yardımcı olur.

<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" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.