Android java.lang.VerifyError?

hlasů
94

V mé aplikaci pro Android, jsem vždy VerifyErrors! A nemohu přijít na to proč. Kdykoliv jsem zahrnují externí JAR, vždycky jsem si VerifyErrors když se snažím, aby zahájily svou aplikaci (s výjimkou pro jednou, když jsem součástí Apache Log4j).

Obvykle tento postup obejít tím, že zdroj knihovny a přidat ji do svého projektu, ale snažím se dát knihovny klienta GDATA .

Mohu si to ve zdroji, ale je to závislostí (mail.jar, activation.jar, servlet-api.jar) nemohu, takže jsem si ověřit chyby. Chtěl bych se dostat k jádru tohoto problému jednou provždy. Díval jsem se na internetu, ale všichni vypadají mluvit o neúplných souborech třídě? které já neznám.

Položena 21/03/2009 v 06:24
zdroj uživatelem
V jiných jazycích...                            


30 odpovědí

hlasů
113

Podívejte se na Logcat a uvidíme, co to způsobuje VerifyError. Je to pravděpodobně některé metody ve třídě java.lang, která není podporována v Android SDK úrovni, kterou používáte (například String.isEmpty ()).

Odpovězeno 04/02/2010 v 21:17
zdroj uživatelem

hlasů
54

Z Android vývojáře :

Výstup z „adb Logcat“ označuje třídu, která nemůže být nalezen, stejně jako třídy, která má špatné reference. Místo je identifikován až do tohoto konkrétního pokynu Dalvik. Trik je v tom hledat v protokolech nad výjimky.

Odpovězeno 23/08/2010 v 16:37
zdroj uživatelem

hlasů
32

Android používá jiný formát souboru třídy. Utíkáte na večírek soubory JAR 3rd přes „dx“ nástroj, který je dodáván s Android SDK?

Odpovězeno 21/03/2009 v 08:22
zdroj uživatelem

hlasů
14

Chcete-li, aby to fungovalo musíte přidat jar knihovny do jedné z výchozích složek (i když jste ji již přidali jako zatmění knihovny, stále je třeba přidat jako zdroj).

  1. Vytvoří adresář v projektu (ex „libs“) a dal tam knihovny jar.
  2. Přidat adresář do cesty stavět třídu (klikněte pravým tlačítkem na složku a vyberte „Sestavit cestu“ -> „Použít jako zdrojové složky“).
  3. Přestavět svůj projekt.
Odpovězeno 29/11/2010 v 09:21
zdroj uživatelem

hlasů
8

mně se to stalo právě teď. Tato chyba byla způsobena, protože jsem byl s použitím metod z novější SDK, že můj přístroj měl.

Android 1.5 zařízení instalovala APK pomocí takto:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
Odpovězeno 11/05/2010 v 18:04
zdroj uživatelem

hlasů
7

Pokud používáte Retrolambda byste přidali statické metody na rozhraní (které je povoleno pouze v Javě 8).

Odpovězeno 23/03/2015 v 13:11
zdroj uživatelem

hlasů
7

Zjistil jsem zajímavou věc. Používám:

<uses-sdk
   android:minSdkVersion="9"
   android:targetSdkVersion="18" />

Takže některé z nových Android 4 schopností nejsou implenented v Androidu 2.3 podobně ImageView.setLayerType. Aby nedošlo k chybě při běhu jednoduše:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

Tento přístup by měl být použit také manipulaci výjimky:

} catch (NetworkOnMainThreadException nomte) {
   // log this exception
} catch (SocketTimeoutException socketTimeoutException) {
   // log this exception
}

NetworkOnMainThreadExceptionnení implementována v Android 2.3, takže když je načten třídy (a ne dříve!) se výjimka java.lang.VerifyErrorvyskytuje.

Odpovězeno 19/09/2013 v 20:19
zdroj uživatelem

hlasů
6

Tato situace může také nastat, protože přihlášení mezní chyba na lízátko pod verzí, kde je omezena aľ velikosti max 65K

Možným řešením pro výše uvedené otázce

Krok 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

Krok 2: Rozšiřte své aplikace s MultiDexApplication, pro např

public class MyApplication extends MultiDexApplication

Krok 3: Přepsání attachBaseContext

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

Krok 4: Dalším krokem je přidání následující android část vaší aplikací build.gradle

 dexOptions {
      preDexLibraries = false
   }

Krok 5: Konečně, následující obecné části vašich aplikací build.gradle

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

Bližší informace naleznete na pokladně

https://developer.android.com/tools/building/multidex.html

Odpovězeno 30/07/2015 v 14:08
zdroj uživatelem

hlasů
3

I downgrade gradle verzi od 2.0.0-alfa2 až 1.5.0, které tento problém vyřešil.

Odpovězeno 15/12/2015 v 04:46
zdroj uživatelem

hlasů
3

V mém případě se to stalo, když jsem aktualizován z Eclipse Indigo Eclipse Juno: Nejsem si jistý, jaký je skutečný důvod, ale můj projekt Android, že jsem pracoval na dlouhou dobu přestal pracovat kvůli této výjimky.

Po mnoha hodinách se snaží opravit, že jsem našel řešení pro mě.

V mém projektu Android, já používám jiný projekt (řekněme „MyUtils“), která je ve stejném prostoru. Takže jsem potřeboval udělat následující:

Klikněte pravým tlačítkem myši na projektu Android -> Build cestu -> Configure vybudovat dráhu

Nyní přejděte na záložku „Objednávka a export“ a aby „MyUtils“ kontrolovat. To je ono: I zbavil tento nepříjemný výjimky.

Odpovězeno 14/03/2013 v 09:20
zdroj uživatelem

hlasů
3

V roce Eclipse 4.x, pokud narazíte na tento problém, zkuste níže:

  1. přenést všechny zahrnuté sklenic 3th-party do User-Libaray
  2. přesunout do uživatelského lib před android lib a nechte si jej v záložce objednávky a export
  3. vyčistit a znovu spustit
Odpovězeno 23/09/2012 v 08:08
zdroj uživatelem

hlasů
2

Mám tento problém po aktualizaci SDK. Kompilátor měl problémy se svými vnějšími librarys. Udělal jsem to: klikněte pravým tlačítkem myši na projekt, pak „android Nástroje> přidat suport knihovnu ...“ to nainstalovat na můj knihovní projekt „android-support-v4.jar“.

Odpovězeno 20/11/2012 v 16:23
zdroj uživatelem

hlasů
2

Měl jsem stejný problém. I stavěl s 2,1 r1 a aktualizovány tak, aby 2.1 R3 s novým ADT 17. Musel jsem ověřit chyby na mail.jar JavaMail a to bylo zblázním. Zde je, jak jsem vyřešil problém:

  1. Vytvořili libs / složku a přidal sklenice.
  2. klikněte pravým tlačítkem myši> přidat jako zdrojové složky

Zkoušel jsem nové sestavení a to propadlo. Odstranil jsem libs / adresáře jako zdrojové složky a odstraní refs Do nádoby soubory 3 v sestavení dráhy. Pak jsem přidal libs / složku znovu a přidal každou sklenici do libs / složky k sestavení dráhy. Nyní to funguje, jak se očekávalo. To je divný řešení, ale pracoval pro mě.

Odpovězeno 01/04/2012 v 17:07
zdroj uživatelem

hlasů
2

Problémem může být také způsobeno nesouladem mezi dvěma androidů projektů. Například pokud jste vytvořili androida knihovnu pomocí balíku „com.yourcompany“, pak máte projekt, hlavní aplikace je pomocí stejného balíku jako základního balíčku. Pak řekněme, že chcete změnit verzi své hlavní aplikace, takže můžete změnit hodnoty souboru manifestu je: Version kód a název verze. Pokud spustíte aplikaci, aniž byste změnili tyto hodnoty pro knihovnu, měli byste dostat ověřit chybu na libovolné volání metody na objekt z knihovny.

Odpovězeno 17/02/2012 v 14:30
zdroj uživatelem

hlasů
1

Zjistil jsem, že další případ.

Podmínky:

  • Použít Retrolambda (nejsem si jistý, jestli je to nutné);
  • Proveďte statické metody v rozhraní.

A výsledkem je boom! java.lang.VerifyError při pokusu o přístup třídy, který používá toto rozhraní. Vypadá to, že Android (4.4. * V mém případě) nemá rád statické metody v rozhraní. Odstraněním statické metody z rozhraní dělá VerifyError odejít.

Odpovězeno 22/02/2015 v 09:21
zdroj uživatelem

hlasů
1

Měl jsem stejný problém po provedení git pull.

Řešení: Build -> Clean Project.

Snad to pomůže.

Odpovězeno 23/10/2014 v 13:41
zdroj uživatelem

hlasů
1

Máte-li testy, zkuste komentuje mimo tento řádek z vašeho build.gradesouboru:

testCoverageEnabled = true

Pro mě je to způsobeno VerifyError výjimky týkající se tříd, které využívají Java 1.7 vlastnosti, zejména prohlášení řetězce přepínačů.

Odpovězeno 26/07/2014 v 14:57
zdroj uživatelem

hlasů
1

Měl jsem velmi podobný problém. I přidal Apache POI sklenic a problém se objevil, když jsem aktualizován na Android SDK 22.3.

Měl jsem Android soukromé knihovny kontrolována, takže to nebyl běžný problém s operačním systémem Android SDK. Neoznačenou jsem všechny Apache POI sklenic a přidal jeden po druhém. Zjistil jsem, že poi-3.9-20121203.jar by měl být před poi-OOXML-3.9-20121203.jar . Jinak to nebude fungovat.

Odpovězeno 08/01/2014 v 13:29
zdroj uživatelem

hlasů
1

Mám VerfiyError stejně ... nelze najít skutečný důvod. Pomáhá zabalit nové řádky kódu do metody (Eclipse, ‚Vyjmout metodu ...‘). Takže v mém případě, že důvodem není nepodporovaný metoda.

Odpovězeno 21/03/2010 v 15:21
zdroj uživatelem

hlasů
0

Pro mě to je problém compileSdkVersion. Když jsem úrovně API 21 v konkrétní aplikaci Android ( https://github.com/android10/Android-AOPExample ):

compileSdkVersion 21

java.lang.verifyerror stalo. Tak jsem změnil compileSdkVersion až 19

compileSdkVersion 19

Fungovalo to dobře. Myslím, že by to mohlo být problém SDK buildTools, a zdá se v pořádku, když hladina API <21.

Odpovězeno 26/08/2016 v 01:45
zdroj uživatelem

hlasů
0

Pro mě to bylo v korelaci mezi compileSdkVersion a buildToolsVersion. Měl jsem:

compileSdkVersion 21
buildToolsVersion '19.1.0'

Změnil jsem to na adresu:

compileSdkVersion 21
buildToolsVersion '21.1.2'
Odpovězeno 11/03/2016 v 21:20
zdroj uživatelem

hlasů
0

java.lang.VerifyErrorznamená, že zkompilovaný bytecode se odkazuje na něco, co Android nemůže najít za běhu. To VerifyError Problémy me pouze s kitkat4.4 a menší verze nikoliv ve výše uvedeném verzi toho i já běžel stejnou postavu v obou přístrojích. když jsem použil jackson JSON parser ze starší verze zobrazujejava.lang.VerifyError

compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+'

Pak jsem změnil závislost na nejnovější verzi 2.2 až 2.7 bez jádra knihovny (když zahrnu core2.7 dává VerifyError), pak to funguje. což znamená, že metody a další obsah jádra přeneseny do nejnovější verzi Databind2.7 . To opravit své problémy.

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'
Odpovězeno 18/02/2016 v 12:31
zdroj uživatelem

hlasů
0

Pro mě je otázka skončil ve skutečnosti v tom, že jsem byl s použitím ustanovení o multi-catch někde ve třídě, která je Java 7 funkce (a API 19+). Tak to zřítí se VerifyErrorna všech pre-19 zařízení.

Odpovězeno 14/09/2015 v 18:12
zdroj uživatelem

hlasů
0

Jen jsem identifikoval jinou situaci, že k němu dojde, a to nejen kvůli libs nejsou dx ‚ed. Mám AsyncTask s velmi dlouhou doInBackground mehtod. Z nějakého důvodu začala tato metoda s více než 145 linek rozbít. Stalo se to na 2.3 aplikací. Když jsem právě zapouzdřený některé části do metod, fungovalo to dobře.

Takže pro ty, kteří nemohli najít třídu, která nebyla správně dx ‚ed, zkuste snížit délku svého postupu.

Odpovězeno 18/08/2015 v 12:57
zdroj uživatelem

hlasů
0

V mém případě tato chyba nastat, protože můj google-play-service není nejnovější .

Pokud váš projekt nepodporuje určitou třídu v JAR, dojde k této chybě (např. ImageView.setLayerType, AdvertisingIdClient, atd.)

Odpovězeno 08/01/2015 v 03:27
zdroj uživatelem

hlasů
0

Jsem si jistý, že moje příčina byla jiná než ta vaše, ale protože se jedná o jeden z největších hitů, když hledali „Android java.lang.VerifyError“ Myslel jsem, že to zaznamenat zde pro budoucí generace.

Měl jsem nějaké třídy v duchu:

public class A { ... }
public class B extends A { ... }
public class C extends A { ... }

A způsob, který udělal:

A[] result = null;
if (something)
    result = new B[cursor.getCount()];
else
    result = new C[cursor.getCount()];

// Fill result
...

Tak dlouho, jak tento kód byl přítomen v souboru, tak bych dostat VerifyError poprvé byl načten třída obsahující tuto metodu. Rozdělí ji do dvou samostatných metod (ten, který se zabýval pouze s B je, a ten, který zabýval pouze s C se) problém vyřešen.

Odpovězeno 15/07/2013 v 22:04
zdroj uživatelem

hlasů
0

Musel jsem odstranit závislé projekty a místo toho sestavit závislé projekty jsou jar je a zahrnout je do složky libs.

Odpovězeno 07/11/2012 v 16:58
zdroj uživatelem

hlasů
0

Pro příští generace, právě jsem dostal tuto chybu, protože jsem byl s použitím Arrays.copyOf()což není metoda podporována Java 1.5, což odpovídá Android Level 4. Protože jsem běžel včetně knihoven vyvinutých v rámci 1.6 jsou sestaveny v pořádku. Viděl jsem jen problémy, když jsem se přestěhoval třídu v otázce ke mně Android projektu - pak byla zvýrazněna chyba.

Uncaught handler: thread main exiting due to uncaught exception
java.lang.VerifyError: com.j256.ormlite.dao.BaseDaoImpl$DaoConfigArray
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:71)
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:1)
  at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:429)
  at java.lang.ThreadLocal.get(ThreadLocal.java:66)

Na této linie jsem se snažil udělat new DaoConfigArray, a že třída měla následující řádek:

// copyOf is only supported in Java >= 1.6
doArray = Arrays.copyOf(daoArray, newLength);

Co dělalo to ještě složitější je to, že řada 71 byla ukázala na ThreadLocalinicializaci, který jsem považoval za důvod problému zpočátku.

private static final ThreadLocal<DaoConfigArray> daoConfigLevelLocal
    = new ThreadLocal<DaoConfigArray>() {
    @Override
    protected DaoConfigArray initialValue() {
        return new DaoConfigArray();
    }
};
Odpovězeno 15/04/2012 v 21:53
zdroj uživatelem

hlasů
0

I kódované Android metody API / třídy, které jsou v SDK 2.1, a snažil se jej spustit na Android 1.6 emulátoru. Takže já mám tuto chybu.

ŘEŠENÍ: Změnil ji opravit verzi emulátoru.

TENTO PRACOVAL pro mě .. Díky.

Odpovězeno 08/02/2011 v 20:24
zdroj uživatelem

hlasů
0

Také jsem měl tento problém, protože měl své sklenice v uživatelském knihovně ...

Jak jsem vyřešil tohle je přidat do lib adresáře a přidejte je do nemovitostí stavět v zatmění ...

Poprvé, když jsem to udělal, to nefungovalo, ale pak jsem je odstranil a znovu readded je a začala pracovat ...

Trochu podivné jeden! ale nyní pracuje po celou dobu.

Hodně štěstí

Odpovězeno 26/01/2011 v 16:00
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more