Android java.lang.VerifyError?
-
21-08-2019 - |
質問
私のAndroidアプリだっVerifyErrors!させることができませんの姿はいかがでしょうか。これなどの外部JARっVerifyErrorsう新マースのアプリケーション(以外の場合は、一度、私がApache Log4j.)
私は、普段はこのソースの図書館を追加で自分自身のプロジェクトをかもしれませんが、同じようとはして GDataライブラリ.
取得できますこのソースで依存関係(mail.jar,activation.jar,servlet-api.jarいいか検証します。皆さんのこの問題にしている。私のインターネットで見つ不完全なクラスファイル?私が知らない。
解決
Androidのは、別のクラスファイル形式を使用しています。あなたは「DX」ツールを使用してサードパーティのJARファイルを実行していることのAndroid SDKに付属?
他のヒント
LogCatを見てないVerifyErrorを引き起こしているものを参照してください。それはおそらくあなたが使用しているAndroidのSDKレベルではサポートされていませんjava.langのクラスでは、いくつかの方法です(例えば、String.isEmpty())。
アンドロイド-開発するから:
「adbのlogcat」からの出力ができませんでしたクラスを示し、 見つかっただけでなく、悪いの参照を持つクラス。場所 特定のDalvik命令まで識別されます。トリックはあります 例外上記ログで見てます。
それを動作させるために必要な追加のjarの図書館のソースフォルダていても付加してeclipse図書館、依然必要として追加します。
- ディレクトリの作成プロジェクト (e.x."lib")図書館のjar あります。
- 追加のディレクトリのクラス 経路(クリック右ボタンを フォルダを選択し"の構築の道"->"使用 としてのソースフォルダ").
- 再構築プロジェクトに関する
これは、今の私に起こりました。 私は私のデバイスが持っていた新しいSDKからメソッドを使用していたため、エラーが発生しました。
のAndroid 1.5デバイスはこれを使ってAPKをインストール
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
この興味深い。使ってい:
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="18" />
一部の新しいAndroid4力なimplenented Android2.3のように ImageView.setLayerType
.を避ける実行時エラーを一言で言えば、
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
このアプローチすべきでも使用例外の扱い:
} catch (NetworkOnMainThreadException nomte) {
// log this exception
} catch (SocketTimeoutException socketTimeoutException) {
// log this exception
}
NetworkOnMainThreadException
が実施されなかAndroid2.3でき クラスがロードされ ません。) の例外 java.lang.VerifyError
が発生します。
使用している場合は、Retrolambdaが追加されている静的方法インターフェースでのみ可Java8).
これは、それが最大65Kのサイズ
件まで制限されているバージョン、下にLollypopに制限エラーを参照するにも発生することができ上記の問題に対する解決策
ステップ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
ステップ2:例えばのために、MultiDexApplicationを使用してアプリケーションを拡張する
public class MyApplication extends MultiDexApplication
ステップ3:attachBaseContextをオーバーライドします。
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
ステップ4: 次のステップでは、
build.gradleアプリのアンドロイド一部に以下を追加することです dexOptions {
preDexLibraries = false
}
ステップ5: 最後に、アプリのbuild.gradleの一般的な部分に次の
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = ['--multi-dex']
} else {
dx.additionalParameters += '--multi-dex'
}
}
}
詳細については、チェックアウトしてください。
https://developer.android.com/tools/building/multidex.html >
私は、Eclipseインディゴから更新するとき、私の場合は、ジュノをEclipseに起こりました例外ます。
それを修正しようとしているのの多くの時間後、私は私のための解決策を見つけます。
私のAndroidのプロジェクトで、私は、同じワークスペースにある他のプロジェクト(たとえば、「MyUtils」)を使用します。だから、私は次の操作を実行するために必要なます:
Androidのプロジェクトの右クリック - >パスをビルド - >設定のパスを構築する
さて、タブの「注文とエクスポート」に移動し、「MyUtils」にチェックをします。それはそれだ:私はこの迷惑な例外を処分した。
。私は、この問題を解決1.5.0に2.0.0-アルファ2からGradleのバージョンをダウングレードします。
問題は、2つのアンドロイド・プロジェクトの間のミスマッチが原因である可能性があり。あなたがパッケージ「com.yourcompany」を使ってAndroidのライブラリを開発している場合たとえば、あなたは基本パッケージと同じパッケージを使用して、メインアプリケーションのプロジェクトを持っています。次に、マニフェストファイルの値を変更するので、あなたはあなたのメインのアプリのバージョンを変更したいとしましょう:バージョンコードとバージョン名。あなたは、ライブラリのためにこれらの値を変更せずにアプリケーションを実行する場合は、ライブラリからオブジェクトのメソッドのいずれかの呼び出しで検証エラーになるだろう。
また、同じ問題です。またビル2.1r1および更新され2.1r3新adt17.あったかを検証エラー javamailのmail.jar でもあったのですがなくなると、どんなに恵まれていここにあるか解決の問題:
- 作成したlib/フォルダとフォルダのjar.
- 右クリック>を追加してフォルダ
また、再構築で失敗しました。取り出して、そのlib/ディレクトリソースとしてのフォルダとフォルダ削除されrefの3つのjarファイルのパスです。そして、libフォルダ、およびそのjarをlib/フォルダへのパスです。この作品として期待される。これは奇妙な回避策がうまくいった。
に Eclipse 4.x
, が出てしまったこの問題のみ。
- 移行して3日パーティジャのユーザー Libaray
- をユーザー lib以前のandroidリチウムイオン電池及びチェックでの輸出タブ
- クリーン再構築の実行
私は、SDKを更新した後、この問題を持っています。コンパイラは私の外部librarysに問題がありました。 「...>アンドロイドツール対応無しライブラリを追加」、これが私のプロジェクトライブラリ「アンドロイド・サポート・v4.jar」にインストールする権利、プロジェクトにその後をクリックしてください:私はこれをしませんでした。
私もVerfiyErrorを取得...本当の理由を見つけることができません。これは、メソッドにコードの新しい行をラップするのに役立ちます(Eclipseの、「メソッドを抽出します...」)。だから、私の場合には理由がサポートされていない方法ではありません。
私も同様の問題です。またの追加 Apache施設 jarファイルや問題に登場した時に更新android SDK22.3.
私のAndroid民間図書館を確認できない共通の問題とandroidをサポート。私はチェックすべて Apache施設 ジャを追加します。これらの poi-3.9-20121203.jar 必前 poi-ooxml-3.9-20121203.jar.そうでない場合はできません。
あなたがテストを持っている場合は、あなたのbuild.grade
ファイルからこの行をコメントアウトしてみてください。
testCoverageEnabled = true
私このためには、Java 1.7の機能、特に文字列のswitch文を使用するクラスでないVerifyError例外を発生させます。
私はgitのプルを行った後、同じ問題を抱えていました。
ソリューション:ビルド - >クリーンプロジェクト
。この情報がお役に立てば幸いです。
いそのものには幾つかの原因があります。
条件:
- 利用Retrolambdaくることが必要です);
- く静的方法インターフェース。
その結果がドーン!java.lang.VerifyErrorしようとした場合にアクセスのクラスを使用したインタフェース。ようになAndroid(4.4.* 私の場合)さんのように静的方法インタフェース除方法からインターフェイスをVerifyErrorます。
java.lang.VerifyError
ることを意味しめbytecodeはを参照しもAndroidなので行います。このverifyError問題だけと kitkat4.4少していない旧バージョンを上版 のなっく両方の機器です。ような成分が含まれていますjackson jsonパーサの古いバージョンを示す java.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.+'
そのDependancyの 最新バージョン2.2 2.7 なし コアライブラリ(含む場合core2.7を与えているのでverifyErrorであることを検証することが。という方法及びその他のコンテンツの コア 移行の最新版へアップデートする Databind2.7.この修正の私の課題です。
compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'
ユーザーライブラリで私の瓶を持っていたとして、私はまた、この問題を抱えていた...
私はこれを解決する方法は、libフォルダに追加して、日食でビルドプロパティでそれらを追加することでした...
私はこれをしなかった最初の時間は、それが動作しませんでしたが、その後、私はそれらを削除し、再びそれらを再添加し、それが仕事を始めた...
奇妙な1のビット!しかし、今、すべての時間を働いています。
グッドラック
私はコードAndroid APIメソッド/クラスにあるSDK2.1たしているためでAndroid1.6することができます。なんとエラーになります。
【解決 変更が正しくエミュレータです。
この た 私にとって.. 感謝。
Arrays.copyOf()
を使用していたので、後世のために、私はこのエラーを得ました。私は私のAndroidのプロジェクト上問題のクラスを移動したときに私は問題を見た - 。その後、エラーが強調された。
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)
その行に私はnew DaoConfigArray
を行うにしようとしていたと、そのクラスは、次の行を持っていました
// copyOf is only supported in Java >= 1.6
doArray = Arrays.copyOf(daoArray, newLength);
何それがさらに複雑にすると、そのライン71は、私が最初に問題の原因だと思ったThreadLocal
の初期化を指したです。
private static final ThreadLocal<DaoConfigArray> daoConfigLevelLocal
= new ThreadLocal<DaoConfigArray>() {
@Override
protected DaoConfigArray initialValue() {
return new DaoConfigArray();
}
};
私は依存プロジェクトを削除し、代わりにjarファイルのであり、LIBSのフォルダにそれらを含める依存プロジェクトをコンパイルする必要がありました。
私は私の原因はあなたより異なっていたことを確信しているが、これは「アンドロイドにjava.lang.VerifyError」の検索トップヒットの一つであることから、私は後世のために、ここでそれを記録しようと思いました。
私はの線に沿っていくつかのクラスを持っていました
public class A { ... }
public class B extends A { ... }
public class C extends A { ... }
とやった方法:
A[] result = null;
if (something)
result = new B[cursor.getCount()];
else
result = new C[cursor.getCount()];
// Fill result
...
限り、このコードは、ファイルに存在したとして、私はないVerifyErrorにこのメソッドを含むクラスがロードされた最初の時間になるだろう。二つの別個の方法(Bさんのみ対処一つであり、Cのでのみ取り扱わもの)にそれを分割する問題を修正します。
私の場合、このエラーは
を発生します。 あなたのプロジェクトが.jarでいくつかのクラスをサポートしていない場合は、、このエラーが(例:ImageView.setLayerType、AdvertisingIdClient、など。)が発生します。
私だけではないだけに起因のDX の「EDではないLIBSに、それが発生した別の状況を確認しました。 私は非常に長いdoInBackgroundのmehtodでAsyncTaskを持っています。何らかの理由で145本の以上のラインを持つこの方法は破るために始めました。 これは、2.3のアプリで起こりました。 私はちょうど方法にいくつかの部分をカプセル化すると、それがうまく働いています。
あなたの方法の長さを短くしてみてください、正しくのDX '編ではなかったクラスを見つけることができなかったものについては、これます。
私にとっては、問題は、実際に私は、Java 7の機能(およびAPI 19+)であるクラスのどこかに、マルチcatch節を使用していたということになりました。だから、すべての前19デバイス上のVerifyError
でクラッシュしていました。
私にとってはcompileSdkVersionとbuildToolsVersionとの相関関係にありました。私が持っていた。
compileSdkVersion 21
buildToolsVersion '19.1.0'
私はそれを変更します:
compileSdkVersion 21
buildToolsVersion '21.1.2'
私にとって、それはcompileSdkVersionの問題です。私は特定のアンドロイドのアプリケーションにAPIレベル21を使用する場合( https://github.com/android10 /アンドロイド-AOPExample の):
compileSdkVersion 21
にjava.lang.VerifyErrorが起こりました。だから私は19にcompileSdkVersionを変更します。
compileSdkVersion 19
これはよく働きました。私はそれがSDKビルドツールの問題かもしれないと思うし、それはOKと思われるとき、APIレベル<21