Di aplikasi Android saya, saya selalu mendapatkan VerifyErrors! Dan saya tidak tahu mengapa. Setiap kali saya menyertakan JAR eksternal, saya selalu mendapatkan VerifyErrors saat mencoba meluncurkan aplikasi saya (kecuali sekali, saat saya menyertakan Apache Log4j.)
Saya biasanya menyiasati ini dengan mengambil sumber pustaka dan menambahkannya ke proyek saya, tetapi saya mencoba untuk meletakkan pustaka klien GData .
Saya bisa mendapatkan ini di sumber, tetapi dependensinya (mail.jar, activation.jar, servlet-api.jar) Saya tidak bisa, jadi saya mendapatkan kesalahan verifikasi. Saya ingin mengetahui akar masalah ini untuk selamanya. Saya mencari di internet, tetapi mereka semua sepertinya berbicara tentang file kelas yang tidak lengkap? yang saya tidak tahu.
sumber
Jawaban:
Android menggunakan format file kelas yang berbeda. Apakah Anda menjalankan file JAR pihak ketiga melalui alat "dx" yang disertakan dengan Android SDK?
sumber
Lihat LogCat dan lihat apa yang menyebabkan verifikasi kesalahan. Ini mungkin beberapa metode dalam kelas java.lang yang tidak didukung pada tingkat SDK Android yang Anda gunakan (misalnya, String.isEmpty ()).
sumber
Dari pengembang android :
Keluaran dari "adb logcat" menunjukkan kelas yang tidak dapat ditemukan serta kelas yang memiliki referensi buruk. Lokasi diidentifikasi hingga ke instruksi Dalvik spesifik. Triknya adalah dengan melihat log di atas pengecualian.
sumber
WARN/dalvikvm(1052): VFY: unable to resolve static method 475: Ljavax/xml/datatype/DatatypeFactory;.newInstance ()Ljavax/xml/datatype/DatatypeFactory;
(sekarang untuk mencari tahu bagaimana melakukannya tanpa DatatypeFactory)Untuk membuatnya bekerja Anda perlu menambahkan jar dari perpustakaan ke salah satu folder sumber (meskipun Anda telah menambahkannya sebagai perpustakaan gerhana, Anda masih perlu menambahkannya sebagai sumber).
sumber
Itu terjadi pada saya sekarang. Kesalahan ini terjadi karena saya menggunakan metode dari SDK yang lebih baru yang dimiliki perangkat saya.
Perangkat Android 1.5 memasang apk menggunakan ini:
sumber
Saya menemukan kasus yang menarik. Saya menggunakan:
Jadi beberapa kemampuan Android 4 baru tidak ditanamkan di Android 2.3 seperti
ImageView.setLayerType
. Untuk menghindari kesalahan runtime:Pendekatan ini harus digunakan juga dengan penanganan pengecualian:
NetworkOnMainThreadException
tidak diimplementasikan di Android 2.3 jadi ketika kelas dimuat (dan bukan sebelumnya!) pengecualianjava.lang.VerifyError
terjadi.sumber
java.lang.ReflectiveOperationException
yang tidak termasuk dalam versi Android yang lebih lama (misalnya 4.2), tetapi Lint tidak memperingatkan saya tentang ini ...CameraAccessException
, yang diperkenalkan di Android 5.0, tetapi ketika saya menjalankan di perangkat Android 4.3, VerifyError dilempar.Jika Anda menggunakan Retrolambda, Anda mungkin telah menambahkan metode statis ke antarmuka (yang hanya diperbolehkan di Java 8).
sumber
Ini juga dapat terjadi karena kesalahan batas referensi pada Lollypop versi di bawah, yang dibatasi hingga ukuran maksimal 65K
Solusi yang mungkin untuk masalah di atas
Langkah 1:
Add android-support-multidex.jar to your project. The jar can be found in your Android SDK folder /sdk/extras/android/support/multidex/library/libs
Langkah2: Perluas aplikasi Anda dengan MultiDexApplication, misalnya
Langkah3: Timpa attachBaseContext
Step4: Langkah selanjutnya adalah menambahkan yang berikut ini ke bagian android dari aplikasi Anda build.gradle
Langkah 5: Terakhir, mengikuti bagian umum dari aplikasi Anda build.gradle
Untuk detailnya, silakan checkout
https://developer.android.com/tools/building/multidex.html
sumber
Dalam kasus saya, itu terjadi ketika saya memperbarui dari Eclipse Indigo ke Eclipse Juno: Saya tidak yakin apa alasan sebenarnya, tetapi, proyek Android saya yang saya kerjakan untuk waktu yang lama berhenti berfungsi karena pengecualian itu.
Setelah berjam - jam mencoba memperbaikinya, saya menemukan solusinya untuk saya.
Dalam proyek Android saya, saya menggunakan proyek lain (katakanlah, "MyUtils") yang ada di ruang kerja yang sama. Jadi, saya perlu melakukan hal berikut:
Klik kanan pada proyek Android -> Build path -> Configure build path
Sekarang, masuk ke tab "Order and Export" dan buat "MyUtils" dicentang. Itu dia: Saya menyingkirkan pengecualian yang mengganggu ini.
sumber
Saya menurunkan versi gradle dari 2.0.0-alpha2 ke 1.5.0 yang memecahkan masalah ini.
sumber
Masalahnya juga bisa disebabkan oleh ketidakcocokan antara dua project Android. Misalnya jika Anda telah mengembangkan pustaka android menggunakan paket "com.perusahaananda", maka Anda memiliki proyek aplikasi utama yang menggunakan paket yang sama sebagai paket dasar. Kemudian katakanlah Anda ingin mengubah versi aplikasi utama Anda, jadi Anda mengubah nilai file manifes: Kode Versi dan Nama versi. Jika Anda menjalankan aplikasi tanpa mengubah nilai-nilai itu untuk pustaka, Anda akan mendapatkan kesalahan verifikasi pada setiap panggilan metode pada objek dari pustaka.
sumber
Saya memiliki masalah yang sama. Saya membangun dengan 2.1 r1 dan memperbarui ke 2.1 r3 dengan adt 17 yang baru. Saya telah memverifikasi kesalahan pada mail.jar javamail dan itu membuat saya gila. Inilah cara saya memecahkan masalah:
saya mencoba membangun kembali dan gagal. Saya menghapus direktori libs / sebagai folder sumber dan menghapus ref ke 3 file jar di jalur build. Kemudian saya menambahkan folder libs / lagi, dan menambahkan setiap jar di folder libs / ke jalur build. Sekarang berfungsi seperti yang diharapkan. Ini adalah solusi yang aneh tetapi berhasil untuk saya.
sumber
Dalam
Eclipse 4.x
, jika Anda mengalami masalah ini, coba di bawah ini:sumber
Saya mengalami masalah ini setelah pembaruan SDK. Kompiler mengalami masalah dengan perpustakaan eksternal saya. Saya melakukan ini: klik kanan pada proyek, lalu "Alat android> tambahkan pustaka pendukung ..." pemasangan ini di pustaka proyek saya "android-support-v4.jar".
sumber
java.lang.VerifyError
berarti bytecode Anda yang dikompilasi mengacu pada sesuatu yang tidak dapat ditemukan Android saat runtime. VerifikasiError ini Masalah saya hanya dengan kitkat4.4 dan versi yang lebih rendah tidak di versi di atas itu bahkan saya menjalankan build yang sama di kedua Perangkat. ketika saya menggunakan parser jackson json dari versi yang lebih lama itu terlihatjava.lang.VerifyError
Kemudian saya telah mengubah Dependancy ke versi terbaru 2.2 menjadi 2.7 tanpa pustaka inti (ketika saya menyertakan core2.7 itu memberikan verifikasiError), kemudian berfungsi. yang berarti Metode dan konten inti lainnya dipindahkan ke versi terbaru Databind2.7 . Ini memperbaiki Masalah saya.
sumber
Saya mendapatkan VerfiyError juga ... tidak dapat menemukan alasan sebenarnya. Ini membantu untuk membungkus baris kode baru ke dalam metode (Eclipse, 'Metode Ekstrak ...'). Jadi dalam kasus saya, alasannya bukanlah metode yang tidak didukung.
sumber
Saya memiliki masalah yang sangat mirip. Saya telah menambahkan stoples Apache POI dan masalah muncul ketika saya memperbarui ke Android SDK 22.3.
Saya telah memeriksa Perpustakaan Pribadi Android jadi ini bukan masalah umum dengan SDK Android. Saya menghapus centang semua stoples Apache POI dan menambahkan satu per satu. Saya menemukan bahwa poi-3.9-20121203.jar harus sebelum poi-ooxml-3.9-20121203.jar . Jika tidak, itu tidak akan berhasil.
sumber
Jika Anda memiliki tes, coba komentari baris ini dari
build.grade
file Anda :Bagi saya ini menyebabkan pengecualian VerifyError pada kelas yang menggunakan fitur Java 1.7, terutama pernyataan saklar string.
sumber
Saya memiliki masalah yang sama setelah melakukan git pull.
Solusi: Bangun -> Proyek Bersih.
Semoga ini membantu.
sumber
Saya telah menemukan kasus lain.
Kondisi:
Dan hasilnya booming! java.lang.VerifyError saat mencoba mengakses kelas yang menggunakan antarmuka itu. Sepertinya Android (4.4. * Dalam kasus saya) tidak menyukai metode statis dalam antarmuka. Menghapus metode statis dari antarmuka membuat VerifyError pergi.
sumber
Saya juga mengalami masalah ini, seperti stoples saya di perpustakaan pengguna ...
Cara saya menyelesaikan ini adalah dengan menambahkannya ke folder lib dan kemudian menambahkannya di properti build di eclipse ...
Pertama kali saya melakukan ini, itu tidak berhasil, tetapi kemudian saya menghapusnya dan membacanya lagi dan itu mulai berfungsi ...
sedikit yang aneh! tapi sekarang bekerja sepanjang waktu.
Semoga berhasil
sumber
Saya telah mengkodekan metode / kelas Android API yang ada di SDK 2.1, dan mencoba menjalankannya di emulator Android 1.6. Jadi saya mendapat kesalahan itu.
SOLUSI: Mengubahnya menjadi versi emulator yang benar.
INI BERHASIL UNTUK SAYA .. Terima kasih.
sumber
Untuk anak cucu, saya baru saja mendapatkan kesalahan ini karena saya menggunakan
Arrays.copyOf()
yang bukan merupakan metode yang didukung oleh Java 1.5 yang sesuai dengan Android Level 4. Karena saya menjalankan termasuk pustaka yang dikembangkan di bawah 1.6, mereka dikompilasi dengan baik. Saya hanya melihat masalah ketika saya memindahkan kelas yang dimaksud ke proyek Android saya - kemudian kesalahan itu disorot.Pada baris itu saya mencoba untuk melakukan
new DaoConfigArray
dan kelas itu memiliki baris berikut:Yang membuatnya lebih rumit adalah bahwa baris 71 menunjuk ke
ThreadLocal
inisialisasi yang menurut saya adalah alasan dari masalah awalnya.sumber
Saya harus menghapus proyek dependen dan sebagai gantinya mengkompilasi proyek dependen adalah jar dan memasukkannya ke dalam folder libs.
sumber
Saya yakin tujuan saya berbeda dari tujuan Anda, tetapi karena ini adalah salah satu hit teratas saat menelusuri "Android java.lang.VerifyError", saya pikir saya akan merekamnya di sini untuk anak cucu.
Saya memiliki beberapa kelas di sepanjang baris:
Dan metode yang:
Selama kode ini ada di file, saya akan mendapatkan VerifyError saat pertama kali kelas yang berisi metode ini dimuat. Memisahkannya menjadi dua metode terpisah (satu yang hanya berurusan dengan B, dan satu yang berurusan hanya dengan C) memperbaiki masalah.
sumber
Dalam kasus saya, kesalahan ini terjadi karena layanan- google-play saya bukan yang terbaru .
Jika proyek Anda tidak mendukung beberapa kelas dalam .jar, kesalahan ini terjadi (mis. ImageView.setLayerType, AdvertisingIdClient, dll.).
sumber
Saya baru saja mengidentifikasi situasi lain yang terjadi, tidak hanya karena libs bukan dx 'ed. Saya memiliki AsyncTask dengan mehtod doInBackground yang sangat panjang. Untuk beberapa alasan, metode dengan lebih dari 145 baris ini mulai terputus. Itu terjadi di aplikasi 2.3. Ketika saya baru saja merangkum beberapa bagian menjadi metode, itu bekerja dengan baik.
Jadi bagi mereka yang tidak dapat menemukan kelas yang tidak dx dengan benar , coba kurangi panjang metode Anda.
sumber
Bagi saya, masalahnya sebenarnya adalah saya menggunakan klausa multi-catch di suatu tempat di kelas yang merupakan fitur Java 7 (dan API 19+). Jadi itu akan crash
VerifyError
di semua perangkat pra-19.sumber
Bagi saya itu adalah korelasi antara compileSdkVersion dan buildToolsVersion. Saya punya:
Saya mengubahnya menjadi:
sumber
Bagi saya, ini adalah masalah compileSdkVersion. Saat saya menggunakan API level 21 di aplikasi android tertentu ( https://github.com/android10/Android-AOPExample ):
java.lang.verifyerror terjadi. Jadi saya mengubah compileSdkVersion menjadi 19
Ini bekerja dengan baik. Saya pikir itu mungkin masalah SDK buildTools, dan tampaknya OK ketika API level <21.
sumber