NoClassDefFoundError - Eclipse dan Android

193

Saya mengalami masalah saat mencoba menjalankan aplikasi Android yang, hingga menambahkan perpustakaan eksternal kedua ke jalur pembuatannya, berfungsi dengan baik. Sejak menambahkan toples scoreninja, saya sekarang mendapatkan NoClassDefFoundError ketika saya mencoba menjalankan aplikasi.

Inilah pesannya:

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

Karena semua skrip build dihasilkan oleh perangkat Android (?), Saya tidak yakin apa lagi yang bisa saya lakukan selain membersihkan dan membangun kembali atau memulai kembali gerhana (Saya sudah mencoba ketiganya). Adakah yang tahu bagaimana saya bisa mengubah ini?

Untuk Tuan
sumber
1
Bagaimana Anda menambahkan file jar? Apakah Anda menambahkan menggunakan jalur pembangunan -> Perpustakaan -> Guci eksternal ??
Teja Kantamneni
1
Klik kanan proyek> Bangun Jalur> Tambahkan Arsip Eksternal ... sesuai instruksi di sini: scoreninja.appspot.com
Tom R
4
Jika Anda memperbarui ADT baru-baru ini, maka lihat jawaban John di bawah ini (dan upvote!) Stackoverflow.com/a/9916751/489852
Atul Goyal
1
Jika Anda mengalami masalah ini, sebelum Anda langsung beralih ke jawaban John, jawaban @Till di bawah ini menyelesaikannya untuk banyak orang juga, termasuk saya.
Carlos P
Apakah Anda mencoba multidex?
Ashish Rawat

Jawaban:

234

Saya punya masalah ini setelah memperbarui ADT.

Saya menyimpan semua file JAR saya di folder bernama "lib" dan menambahkan toples ke jalur build dengan cara Eclipse yang normal. Ini berfungsi dengan baik sampai pembaruan saya.

Setelah pembaruan saya, saya mendapatkan NoClassDefFoundError untuk kelas yang bisa saya lihat dengan jelas dimasukkan ke dalam toples (memeriksa kelas ReferencedLibraries).

Solusinya adalah menghapus toples saya dari path build dan mengganti nama folder "lib" saya menjadi "libs". Ini adalah konvensi semut, dan tampaknya menjadi cara ADT baru menemukan dan memasukkan pustaka dalam file .apk. Setelah saya melakukan ini, semuanya bekerja dengan baik.

John O'Connor
sumber
1
Terima kasih banyak! Saya tidak punya folder lib atau folder lib sebelum pembaruan ADT kemarin, dan semuanya bekerja dengan baik. Setelah pembaruan, semua stoples eksternal memiliki masalah ini. Mereka telah diperbaiki berkat jawaban Anda. Saya harus menggabungkan milik Anda dengan Brian untuk membuatnya bekerja.
Hong
John terima kasih! Saya akan menambahkan bahwa setelah mengubah folder ke libs saya harus me-restart gerhana agar berfungsi.
Michaeldcooney
5
Saya mengalami masalah yang sama setelah memperbarui ADT, tapi saya menyimpan toples saya di direktori di luar proyek saya dan memasukkannya sebagai Perpustakaan Pengguna di jalur build saya. Solusinya adalah menghapus pustaka pengguna dari jalur build saya dan sebagai gantinya menyertakan guci menggunakan "Tambahkan Guci Eksternal", dan kemudian buat mereka diekspor dengan memeriksa kotak centang pada tab "Pesanan dan Ekspor".
Travis
1
Saya merujuk android-support-v13.jar sebagai perpustakaan eksternal di C: \ android-sdk-windows \ ekstra \ android \ kompatibilitas \ v13. Saya memindahkan JAR itu ke folder libs proyek dan menghapus referensi dari Java Build Path -> Libraries. Bangunan yang bersih dan saya pergi lagi.
Snowwire
Hai. saya mencoba pendekatan kami dengan menambahkan lib jar eksternal di dalam / libs dan sekarang saya menerima kesalahan ini: Konversi ke format Dalvik gagal dengan kesalahan 1
Jonathan
100

Saya tidak harus meletakkan jar-library di aset atau lib (s), tetapi hanya mencentang kotak untuk jar ini di Properties -> Java Build Path -> "Order and Export" (sudah terdaftar sebelumnya, tetapi tidak dipilih )

Sampai
sumber
Terima kasih banyak! Saya telah berjuang dengan kesalahan ini untuk waktu yang lama dan semua yang perlu saya lakukan adalah memeriksa kotak sialan untuk botol di layar "Order and Export". Lucunya, saya hanya harus melakukan ini sehingga itu akan bekerja pada emulator Nook Tablet. Tidak memiliki masalah pada perangkat atau emulator lainnya.
Luis
5
Adakah yang tahu mengapa Anda harus melakukan keduanya, menambah perpustakaan dan juga memilih kotak centang di Orde dan Ekspor? Apakah ada alasan mengapa saya ingin menambahkan JAR eksternal tetapi tidak memasukkannya ke dalam Pesanan dan Ekspor?
Lou Morda
Saya memiliki masalah ini setelah memperbarui ADT dan ini menyelesaikannya untuk saya.
cdavidyoung
5
Itu membantu saya, tetapi hanya setelah saya melakukan Project -> Clean
altumano
Terima kasih!! Menyelamatkan saya. Harus melakukan pembersihan dan restart setelah menginstal Eclipse Juno.
Rynardt
68

Dengan menambahkan jar eksternal ke jalur build Anda, tambahkan saja jar ke paket Anda, tetapi itu tidak akan tersedia selama runtime.

Agar toples tersedia saat runtime , Anda perlu:

  • Letakkan toples di bawah Anda assets folder
  • Masukkan salinan toples ini ke jalur build Anda
  • Buka tab ekspor di jendela sembulan yang sama
  • Centang kotak pada tabung yang baru ditambahkan
Anthony Forloney
sumber
ScoreNinjaAdapter adalah kode orang lain, tetapi saya akan sangat terkejut jika itu berisi kesalahan seperti itu dalam penggunaan umum. Kesalahan terjadi pada suatu titik dalam kode saya sendiri.
Tom R
Kesalahan benar-benar terjadi di sini: sna = new ScoreNinjaAdapter (this, SN_APP_ID, SN_APP_KEY);
Tom R
Apakah Anda memerlukan importpernyataan untuk file jar eksternal? Saya belum pernah menggunakannya.
Anthony Forloney
Sudahkah Anda mencoba menghapus file .jar dari assestspendekatan folder?
Anthony Forloney
Ya. Pada akhirnya, saya muak dengan semua ini dan hanya mengunduh sumber dan menyalin file sumber ke proyek saya. Bukan solusi terbaik, tetapi berhasil sekarang. Terima kasih atas seluruh bantuan Anda.
Tom R
48

Saya punya ini untuk MapActivity. Builds in Eclipse mendapat NoClassDefFound di debugger.

Lupa menambahkan perpustakaan ke manifes, <Application>...</Application>elemen di dalam

<uses-library android:name="com.google.android.maps" />
brian.clear
sumber
27

Saya telah mengubah urutan proyek yang disertakan (Eclipse / Configure Build Path / Order dan Ekspor). Saya telah memindahkan dua proyek dependen saya ke atas daftar "Pesanan dan Ekspor". Itu memecahkan masalah "NoClassDefFoundError".

Ini aneh bagi saya. Saya tidak mendengar tentang pentingnya urutan perpustakaan dan proyek yang disertakan. Android + Eclipse menyenangkan :)

Andrew Krizhanovsky
sumber
Ini juga solusi yang disebutkan oleh pengguna kedua di sini di bugruport: code.google.com/p/android/issues/detail?id=55304
arberg
15

Saya tidak yakin apakah ini terkait, atau apakah Anda bahkan masih mencari jawaban, tetapi saya menemukan utas ini ketika mencoba untuk meneliti kesalahan yang sama (tetapi mungkin karena alasan yang berbeda).

Saya tidak dapat menemukan solusi online, tetapi jawaban pada utas yang sama membuat saya berpikir dan menyadari bahwa saya mungkin hanya perlu membangun kembali (atau membersihkan) proyek.

Di Eclipse, pergi ke Project => Clean. Pilih proyek Anda dan Eclipse sepertinya memperbaikinya sendiri. Bagi saya ini menyelesaikan masalah.

Semoga ini membantu.

Brian
sumber
Ya sepertinya ada bug di Eclipse / ADT / dex / apa pun yang pada dasarnya merindukan kelas dalam pembuatan. Itu juga dapat melewatkan Applicationkelas yang mengarah ke kesalahan yang berbeda.
Timmmm
13

Saya mengalami masalah yang sama. Alasannya adalah bahwa perpustakaan yang saya coba gunakan telah dikompilasi dengan standar JDK 7.

Saya mengkompilasi ulang dengan -source 1.6 -target 1.6opsi dan bekerja dengan baik.

assylias
sumber
Terima kasihUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! Saya sudah frustrasi dengan masalah ini dan Anda menyelesaikannya! Agak ironis bahwa bahkan Jelly Bean 4.3 SDK (API 18) terbaru masih belum bisa membaca 1,7 JAR / kelas. Dan yang terburuk dari semuanya itu tidak mengeluh sama sekali :(
Hendy Irawan
Saya mengalami masalah yang sama. Yang terburuk dari semua adalah bahwa saya berpikir dalam opsi ini dan kemudian saya mengubah -source 1.7 saya dengan -source 1.5 (pasti) dan masalahnya tidak terpecahkan. Tetapi, setelah membaca komentar Anda, saya mencoba lagi dengan 1.6 dan kemudian, itu bekerja seperti pesona.
Pedro Náñez
7

Hal yang sama berlaku untuk saya: Properti -> Java Build Path -> "Order and Export" Menariknya - mengapa ini tidak dilakukan secara otomatis? Saya kira beberapa pengaturan tidak ada. Ini juga terjadi pada saya setelah upgrade SDK.

vlad
sumber
3

Klik kanan folder proyek Anda, cari Properties in Java build path dan pilih file jar yang Anda lihat. Ini berhasil untuk ku.

Zakaria
sumber
2

Saya mencoba semuanya dari posting ini (dan beberapa posting lainnya), dan itu tidak berhasil bagi saya, sejauh ini merupakan upgrade ADT yang paling mengerikan yang pernah saya alami, dan saya tidak akan pernah meningkatkan tanpa ADT backup yang berfungsi.

Saya berhasil menyelesaikannya dengan menghapus proyek, dan kemudian menambahkannya lagi menggunakan sumber cadangan yang saya miliki.

Eli
sumber
2

Saya memiliki kesalahan yang sama dengan ADT22. Mengatasinya dengan memeriksa "Perpustakaan Pribadi Android" di properti -> Java build path -> Order and export. Jika Anda menggunakan proyek perpustakaan apa pun, hal yang sama harus dilakukan untuk mereka juga.

prijupaul
sumber
Itu juga berhasil untuk saya. Saya memasukkan perpustakaan tetapi lupa memeriksanya di "Pesan dan ekspor". Terima kasih!
jmrodrigg
2

Semua jawaban yang ada tidak berfungsi untuk saya karena kasus saya sedikit berbeda. Saya butuh beberapa jam untuk membuatnya bekerja. Saya menggunakan Eclipse.

Proyek android saya mencakup proyek java 1.6 normal lainnya, yang membutuhkan file jar pihak ke-3. Caranya adalah:

  • termasuk toples di proyek java normal untuk dikompilasi (hanya), jangan centang di tab "Order and Export"
  • juga salin file jar ini ke folder "libs" proyek android sehingga akan tersedia di runtime

Semoga ini bisa membantu mereka yang memiliki skenario serupa seperti saya.

Thumb Emas
sumber
1

kadang-kadang Anda harus mengambil seluruh proyek eksternal sebagai perpustakaan dan bukan hanya toples:

masalah saya diselesaikan dengan menambahkan seluruh proyek (dalam kasus saya google-play-services_lib) sebagai perpustakaan dan bukan hanya toples. langkah-langkahnya (dari @style answer ):

  1. File-> Baru-> Lainnya
  2. Pilih Proyek Android
  3. Pilih "Buat Proyek dari sumber yang ada"
  4. Klik tombol "Browse ..." dan arahkan ke proyek yang diinginkan
  5. Selesai (Sekarang proyek panel tindakan di ruang kerja Anda)
  6. Klik kanan pada proyek Anda -> Properti
  7. Di Android-> bagian Perpustakaan klik Tambah
  8. pilih proyek yang baru ditambahkan -> Ok
dvrm
sumber
1

Kadang-kadang itu akan terjadi karena tidak termasuk jar, yang Anda miliki ketergantungannya, dengan tag "uses-libary" di AndroidManifest.xml Anda.

Juga, pastikan itu berada di dalam tag "aplikasi".

Salam,

Ravi

Ravi Pandit
sumber
1

Saya punya masalah ini dan itu disebabkan oleh tidak "mengekspor" perpustakaan. Masalahnya hanya karena file .class untuk beberapa kelas tidak tersedia saat mengemas APK. Waktu kompilasi itu akan berfungsi dengan baik tanpa mengeluarkan exporiting

Dalam kasus saya, saya menggunakan kelas "CusrsorAdapter" dan di bawah "JavaBuildPath-> Order and Export" Saya tidak memeriksa tabung dukungan V4. Setelah itu masalah yang dipilih hilang.

Untuk memastikan Anda mendapatkan kesalahan noClassDefFound karena alasan di atas, silakan periksa logacat Anda, Anda akan melihat kesalahan kelas super yang tidak dikenal saat dijalankan.

Sojan PR
sumber
0

Saya mencoba berbagai hal dan alasan kesalahan dalam kasus saya adalah konflik antara maps.jar dan Google Api di Java Build Path-> Libraries. Jadi, ketika saya menghapus maps.jar itu berfungsi dengan baik.

Salam,

wahib

Wahib Ul Haq
sumber
0

pastikan file jar Anda ada di direktori libs proyek Anda karena Anda menggunakan versi ADT yang lebih baru dengan gerhana Anda.

samir
sumber
0

Saya mendapatkan masalah yang sama persis ... Untuk memperbaikinya, saya baru saja menghapus Android Private Libs saya di "build path" dan mengklik ok ... dan ketika saya membuka op "build path" lagi gerhana telah menambahkannya dengan sendirinya lagi, dan kemudian itu bekerja untuk saya;) ...

pkdkk
sumber
0

saya menghabiskan dua hari untuk mencoba menyelesaikan masalah ini setelah memperbarui ADT. akhirnya saya beruntung mendapatkan posting ini di sini:

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

yang membawa saya ke arah yang benar. ketika Anda mengikuti solusinya - ingatlah untuk mengganti pustaka dukungan android dari semua proyek Anda ke versi yang sama (hapus dan instal ulang ke proyek). Saya harap ini membantu - semoga berhasil

Ron
sumber
0

Jika Anda lebih suka mengetahui file mana yang terkait dengan solusi inilah yang saya temukan. Ubah file .classpath menjadi

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

Ganti file .classpath di semua proyek perpustakaan dan di proyek android utama. File .classpath ada di folder root dari proyek gerhana. Karena jangan lupa untuk menambahkan entri classpath Anda sendiri, jika Anda punya (jadi bandingkan dengan versi .classpath Anda saat ini).

Saya percaya ini adalah hasil yang sama dengan pergi melalui menu gerhana sebagai komponen-pengguna dijelaskan di atas (Eclipse / Configure Build Path / Order and Export).

Arberg
sumber
0

Solusi di sini berhasil untuk saya. Ini masalah mengimpor perpustakaan ke folder libs, lalu memodifikasi file build.gradle dan kemudian membersihkan dengan gradlew.

gabr10
sumber
0

Jika Anda mengubah pesanan dan mengekspor di jalur pembangunan proyek Anda, kesalahan ini tidak akan terjadi. Cara lain untuk mencapainya adalah melalui .classpath di folder proyek Anda.

geekgugi
sumber
0

Coba ini:-

Langkah 1

Tambahkan semua perpustakaan untuk membangun pat di Eclipse (artinya buat semua perpustakaan perpustakaan yang direferensikan)

Langkah 2

Hapus file R.java dan kembali buat proyek. Jangan khawatir, R.java secara otomatis akan diciptakan kembali.

Dingin :)

pengguna1606195
sumber
0

Seperti yang saya mengerti, Proyek Anda tidak menunjukkan kesalahan, karena Anda memasukkan Jar. Tetapi Jar tidak akan digunakan, ketika Proyek Anda "diekspor" ke perangkat. Coba ini

Proyek -> Properti

Java Build Path / Order dan Ekspor

[✔] Jar Anda


sumber
0

Ini sangat sering terjadi pada saya.

Terakhir kali yang terjadi yang saya ingat adalah karena beralihnya Eclipse ADT (Google edisi khusus) ke Android Studio, dan beralih kembali. Saya pada dasarnya mencoba semua metode yang dapat saya temukan di stackoverflow yang tidak berfungsi untuk saya.

Akhirnya, saya membuat aplikasi berfungsi kembali (tidak ada lagi NoCalssDeffoundError) dengan mengganti IDE saya ke Eclipse asli (Kepler) dengan ADT.

tyolab
sumber