NoClassDefFoundError - Tutulma ve Android


193

Oluşturma yoluna ikinci bir harici kitaplık ekleyene kadar iyi çalışan bir Android uygulamasını çalıştırmaya çalışırken bir sorun yaşıyorum. Scoreninja kavanozunu eklediğinden beri , uygulamayı çalıştırmaya çalıştığımda artık NoClassDefFoundError alıyorum.

İşte mesaj:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Tüm yapı komut dosyaları Android araçları (?) Tarafından oluşturulduğundan, temizlemeyi ve yeniden oluşturmayı veya tutulmayı yeniden başlatmayı (zaten üçünü denedim) başka ne yapabileceğimden emin değilim. Bunu nasıl değiştirebileceğimi bilen var mı?


1
Jar dosyasını nasıl eklediniz? U Oluşturma yolunu kullanarak eklediniz mi -> Kütüphaneler -> Dış kavanozlar ??
Teja Kantamneni

1
Proje üzerinde sağ tıklayarak> Yol Oluştur> Harici Arşiv Ekle ... buradaki talimatlara göre: scoreninja.appspot.com
Tom R

4
ADT'yi yakın zamanda güncellediyseniz, aşağıdaki John'un cevabına bakın (ve oy verin!) Stackoverflow.com/a/9916751/489852
Atul Goyal

1
Bu sorunu yaşıyorsanız, doğrudan John'un cevabına geçmeden önce, @Till'in cevabı, birçok insan için de çözülüyor, kendim de dahil.
Carlos P

Multidex'i denediniz mi?
Ashish Rawat

Yanıtlar:


234

ADT'yi güncelledikten sonra bu sorunu yaşadım.

Tüm JAR dosyalarımı "lib" adlı bir klasörde saklıyordum ve kavanozları yapım yoluna normal Eclipse yolunda ekliyordum. Güncellememe kadar bu iyi çalıştı.

Güncellememden sonra, kavanoza açıkça görebildiğim bir sınıf için NoClassDefFoundError alıyordum.

Çözüm, kavanozlarımı oluşturma yolundan kaldırmak ve "lib" klasörünü "libs" olarak yeniden adlandırmaktı. Bu bir karınca sözleşmesidir ve yeni ADT'nin bir .apk dosyasındaki kütüphaneleri bulup içermesi gibi görünmektedir. Bunu yaptıktan sonra her şey yolunda gitti.


1
Çok teşekkürler! Dünün ADT güncellemesinden önce ne bir lib ne de bir libs klasörü vardı ve her şey iyi çalıştı. Güncellemeden sonra tüm dış kavanozlarda bu sorun vardı. Cevabınız sayesinde düzeltildi. Senin çalışmasını sağlamak için seninkiyle Brian'ı birleştirmeliyim.
Hong

Teşekkürler John! Klasörleri libs'e değiştirdikten sonra çalışması için tutulmayı yeniden başlatmam gerektiğini ekleyeceğim.
Michaeldcooney

5
ADT'yi güncelledikten sonra aynı sorunla karşılaştım, ancak kavanozlarımı projemin dışındaki bir dizinde tutuyordum ve bunları oluşturma yolumda bir Kullanıcı Kütüphanesi olarak dahil ediyordum. Çözüm, kullanıcı kütüphanesini derleme yolumdan kaldırmak ve bunun yerine "Harici Kavanoz Ekle" kullanarak kavanoz eklemek ve daha sonra "Sipariş ve Dışa Aktar" sekmesindeki onay kutularını işaretleyerek dışa aktarmalarını sağlamaktı.
Travis

1
C-\ android-sdk-windows \ extras \ android \ compatibility \ v13 adresinde harici bir kütüphane olarak android-support-v13.jar 'a atıfta bulunuyordum. Bu JAR'ı proje libs klasörüne taşıdım ve başvuruyu Java Derleme Yolu -> Kitaplıklar'dan kaldırdım. Temiz bir yapı ve ben tekrar gidiyordum.
Snowwire

Selam. ben / libs içine harici kavanoz libs ekleyerek bizim yaklaşım denedim ve şimdi bu hatayı alıyorum: Dalvik biçimine dönüştürme hata 1 ile başarısız oldu
Jonathan

100

Varlıklara veya lib (lar) 'a jar kütüphanesini koymak zorunda kalmadım, ancak sadece bu kavanozun Özellikler -> Java Derleme Yolu -> "Sipariş ve Dışa Aktar" kutucuğunu işaretleyin (daha önce listelendi, ancak seçilmedi )


Çok teşekkürler! Uzun zamandır bu hatayla uğraşıyordum ve tek yapmam gereken "Sipariş ve İhracat" ekranında kavanozun darn kutusunu kontrol etmekti. Komik olan şey, bunu sadece bir Nook Tablet emülatörü üzerinde çalışacak şekilde yapmak zorunda olduğum. Cihazlarda veya diğer emülatörlerde sorun yaşamadım.
Luis

5
Neden her ikisini de yapmak, kitaplığı eklemek ve ayrıca Sipariş ve Dışa Aktar onay kutusunu seçmek zorunda olduğunuzu bilen var mı? Harici bir JAR eklemek isteyip sipariş ve Dışa Aktarma istemememin bir nedeni var mı?
Lou Morda

ADT güncelledikten sonra bu sorun vardı ve bu benim için çözdü.
cdavidyoung

5
Bana yardımcı oldu, ancak sadece proje yaptıktan sonra -> Temiz
altumano

Teşekkürler!! Beni kurtardı. Eclipse Juno yükledikten sonra temiz ve yeniden başlatmak zorunda kaldı.
Rynardt

68

Dış kavanozu oluşturma yolunuza ekleyerek, kavanozu paketinize ekler, ancak çalışma zamanı sırasında kullanılamaz.

Kavanozun çalışma zamanında kullanılabilir olması için şunları yapmanız gerekir:

  • Kavanozu assetsklasörünüzün altına koyun
  • Kavanozun bu kopyasını oluşturma yolunuza ekleyin
  • Aynı açılır pencerede dışa aktarma sekmesine gidin
  • Yeni eklenen kavanoza karşı kutuyu işaretleyin

ScoreNinjaAdapter başka birinin kodu, ama ortak kullanımda olduğu gibi bir hata içeriyorsa çok şaşırırdım. Hata kendi kodumda bir noktada meydana geliyor.
Tom R

Hata tam anlamıyla burada olur: sna = new ScoreNinjaAdapter (this, SN_APP_ID, SN_APP_KEY);
Tom R

importHarici jar dosyaları için bir ifadeye mi ihtiyacınız var ? Onları hiç kullanmadım.
Anthony Forloney

.Jar dosyasını assestsklasör yaklaşımından kaldırmayı denediniz mi?
Anthony Forloney

Evet. Sonunda, tüm bunlardan bıktım ve sadece kaynağı indirdi ve kaynak dosyaları projeme kopyaladı. En güzel çözüm değil, ama şimdi çalışıyor. Yardımların için teşekkür ederim.
Tom R

48

MapActivity için bunu yaptım. Eclipse yapıları hata ayıklayıcıda NoClassDefFound alır.

Tezahür kütüphaneyi eklemek unuttum, iç <Application>...</Application>eleman

<uses-library android:name="com.google.android.maps" />

27

Eklenen projelerin sırasını değiştirdim (Eclipse / Yapılandırma Yolu / Sipariş ve Dışa Aktar). İki bağımlı projemi "Sipariş Ver ve Dışa Aktar" listesinin en üstüne taşıdım. "NoClassDefFoundError" sorununu çözdü.

Benim için garip. Dahil olan kütüphanelerin ve projelerin sıralamasının önemini duymadım. Android + Eclipse eğlenceli :)


Bu aynı zamanda bugruport'taki ikinci kullanıcı tarafından bahsedilen çözümdür: code.google.com/p/android/issues/detail?id=55304
arberg

15

Bunun ilgili olup olmadığından emin değilim, hatta hala bir cevap arıyorsanız, ancak aynı hatayı (ancak muhtemelen farklı nedenlerle) araştırmaya çalışırken bu konuya rastladım.

Çevrimiçi olarak herhangi bir çözüm bulamadım, ancak benzer bir konudaki bir cevap beni düşündürdü ve muhtemelen projeyi yeniden inşa etmem (veya temizlemem) gerektiğini fark etti.

Eclipse'de Project => Clean seçeneğine gidin. Projenizi seçin ve Eclipse onu kendi başınıza düzeltiyor gibiydi. Benim için bu sorunu çözdü.

Bu yardımcı olur umarım.


Evet, Eclipse / ADT / dex / içinde bir derleme var. Ayrıca Applicationfarklı bir hataya yol açan sınıfı da kaçırabilir .
Timmmm

13

Aynı sorunla karşılaştım. Bunun nedeni, kullanmaya çalıştığım kütüphanenin standart bir JDK 7 ile derlenmiş olmasıydı.

-source 1.6 -target 1.6Seçeneklerle yeniden derledim ve iyi çalıştı.


TEŞEKKÜR EDERİZUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! Bu sorun beni hayal kırıklığına uğrattı ve çözdün! En son Jelly Bean 4.3 SDK'nın (API 18) bile 1.7 JAR / sınıfı okuyamaması biraz ironik. Ve en kötüsü hiç şikayet etmiyor :(
Hendy Irawan

Aynı sorunu yaşıyordum. En kötüsü, bu seçenekte düşündüm ve sonra -source 1.7 (-source 1.5) (emin olmak için) ile değiştirdim ve sorun çözülmedi. Ancak, yorumunuzu okuduktan sonra 1.6 ile tekrar denedim ve sonra bir cazibe gibi çalıştı.
Pedro Náñez

7

Aynı şey benim için de işe yaradı: Özellikler -> Java Oluşturma Yolu -> "Sipariş Ver ve Ver" İlginçtir - bu neden otomatik olarak yapılmıyor? Bazı ayarlar eksik sanırım. SDK yükseltmesinden sonra da bu benim için oldu.


3

Proje klasörünüze sağ tıklayın, Java derleme yolundaki Özellikler'e bakın ve gördüğünüz jar dosyalarını seçin. Bu benim için çalıştı.



2

Bu yazıdan (ve diğer bazı yayınlardan) her şeyi denedim ve benim için işe yaramadı, bu şimdiye kadar yaşadığım en korkunç ADT yükseltmesi ve asla çalışan bir ADT yedeği olmadan yükseltme yapmayacağım.

Projeyi kaldırarak çözdüm ve sonra sahip olduğum bir kaynak yedeğini kullanarak tekrar ekledim.


2

Aynı hatayı ADT22 ile yaşadım. Özellikler -> Java derleme yolu -> Sipariş ve dışa aktarma "Android Özel Kütüphaneler" kontrol çözüldü. Herhangi bir kütüphane projesi kullanıyorsanız, bunlar için de aynı şey yapılmalıdır.


Benim için de işe yaradı. Kütüphaneyi dahil ettim ama "Sipariş ver ve dışa aktar" da kontrol etmeyi unuttum. Teşekkür ederim!
jmrodrigg

2

Mevcut tüm cevaplar benim için işe yaramıyor çünkü benim durumum biraz farklı. Çalışması birkaç saatimi aldı. Eclipse kullanıyorum.

Android projem, 3. parti bir jar dosyasına ihtiyaç duyan başka bir normal java 1.6 projesi içeriyor. Hile:

  • kavanozun derlenmesi için normal java projesine dahil edin (yalnızca), "Sipariş ve Dışa Aktar" sekmesinde kontrol etmeyin
  • Ayrıca bu jar dosyasını android projesinin "libs" klasörüne kopyalayın, böylece çalışma zamanında kullanılabilir olacak

Umarım bu benim gibi benzer senaryolara sahip olanlara yardımcı olur.


1

bazen tüm dış projeyi sadece kavanoz değil, kütüphane olarak almanız gerekir:

benim sorunum sadece kavanoz değil, tüm projeyi (benim durumumda google-play-services_lib) kütüphane olarak ekleyerek çözüldü. ona giden adımlar ( @style answer'dan ):

  1. File-> New-> Diğer
  2. Android Project'i seçin
  3. "Mevcut kaynaktan Proje Oluştur" u seçin
  4. "Gözat ..." düğmesini tıklayın ve istenen projeye gidin
  5. Bitir (Şimdi çalışma alanınızdaki eylem çubuğu projesi)
  6. Projenize sağ tıklayın -> Özellikler
  7. Android-> Kütüphane bölümünde Ekle'yi tıklayın
  8. son eklenen projeyi seç -> Tamam

1

Bazen bağımlılığınız olan jar'ı AndroidManifest.xml dosyasındaki "use-libary" etiketi ile içermemesi nedeniyle olur.

Ayrıca, "uygulama" etiketi içinde olduğundan emin olun.

Saygılarımızla,

Ravi


1

Ben bu sorunu vardı ve kütüphane "ihracat" nedeniyle değildi.Isue sadece APK.Compile zaman ambalajlama sırasında bazı sınıflar için .class dosyaları mevcut değildir çünkü oldu

Benim durumumda "CusrsorAdapter" sınıfını kullanıyordum ve "JavaBuildPath-> Order and Export" altında V4 jar desteğini kontrol etmedim.

Yukarıdaki sebepten dolayı noClassDefFound hatası aldığınızdan emin olmak için lütfen logacat'ınızı kontrol edin, çalışma zamanında bilinmeyen süper sınıflar hatası göreceksiniz.



0

Çeşitli şeyler denedim ve benim durumumda hata nedeni Java Build Path-> Kütüphaneler maps.jar ve Google Api arasındaki çatışma oldu. Yani, maps.jar kaldırdığımda iyi çalıştı.

Saygılarımızla,

Wahib


0

lütfen jar dosyanızın, tutulmanızla birlikte daha yeni ADT sürümünü kullandığınız projenizin libs dizininde olduğundan emin olun.


0

Ben de aynı sorunu var ... Düzeltmek için, sadece Android özel Libs "yapı yolu" kaldırıldı ve Tamam tıklayın ... ve ben "yapı yolu" op açıldığında tekrar tutulma onları tekrar tek başına ekledi, ve sonra benim için çalıştı;) ...


0

ADT güncelledikten sonra bu sorunu çözmeye çalışırken iki gün geçirdim. nihayet burada bu yazı almak şanslıydım:

https://code.google.com/p/android/issues/detail?id=55304

bu da beni doğru yöne götürdü. Çözümü takip ettiğinizde - tüm projelerinizin android destek kütüphanesini aynı sürüme değiştirmeyi unutmayın (kaldırın ve projelere yeniden yükleyin). umarım bu yardımcı olur - iyi şanslar


0

Geçici çözümün hangi dosyalarla ilgili olduğunu bilmek isterseniz, bulduğum şey budur. Basit bir şekilde .classpath dosyasını değiştirin

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Tüm kütüphane projelerinde ve ana android projesinde .classpath dosyasını değiştirin. .Classpath dosyası eclipse projesinin kök klasöründedir. Nedeni varsa, kendi sınıfyolu girişlerinizi eklemeyi unutmayın, bu nedenle mevcut .classpath sürümünüzle karşılaştırın.

Bunun, yukarıda açıklandığı gibi (Eclipse / Yapılandırma Yolu / Sipariş ve Dışa Aktarma) Eclipse menülerinden geçmeyle aynı sonuç olduğuna inanıyorum.


0

Solüsyon burada benim için çalıştı. Bu, kütüphaneyi libs klasörüne aktarmak, ardından build.gradle dosyasını değiştirmek ve ardından gradlew ile temizlemek meselesidir.


0

Siparişinizi değiştirir ve proje oluşturma yolunuzda dışa aktarırsanız, bu hata oluşmaz. Bunu gerçekleştirmenin diğer yolu, proje klasörünüzdeki .classpath yoludur.


0

Bunu dene:-

Aşama 1

Eclipse'de pat oluşturmak için tüm kütüphaneleri ekleyin (tüm kütüphanelerin kütüphanelere referans gösterdiği anlamına gelir)

Adım 2

R.java dosyasını silin ve projeyi yeniden oluşturun. Endişelenme, R.java otomatik olarak yeniden yaratılacak.

Soğuk :)


0

Anladığım kadarıyla Projeniz hiçbir hata göstermiyor, çünkü Jar'ı dahil ettiniz. Ancak Projeniz cihaza "ihraç edildiğinde" Kavanoz kullanılmayacaktır. Bunu dene

Proje -> Özellikler

Java Derleme Yolu / Sipariş ve Dışa Aktarma

[✔] kavanozun


0

Bu benim için çok sık oluyor.

En son hatırladığım zaman Eclipse ADT'yi (Google özel sürümü) Android Studio'ya geçirip geri dönmemdi. Temelde benim için işe yaramadı stackoverflow bulabildiğim tüm yöntemleri denedim.

Sonunda, IDE'mi ADT ile orijinal Eclipse (Kepler) olarak değiştirerek uygulamayı tekrar çalıştım (artık NoCalssDeffoundError yok).

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.