質問

私は2.2のために開発しています(minSdkVersion=8)そして突然私はこのエラーを得ています:

arbitrarily rejecting large method (regs=75 count=28584)
rejected Lcom/Demo/Loyalty/SelectType;.onClick (Landroid/view/View;)V
Verifier rejected class Lcom/Demo/Loyalty/SelectType;
Class init failed in newInstance call (Lcom/Demo/Loyalty/SelectType;)


java.lang.VerifyError: com.Demo.Loyalty.SelectType
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1429)
at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)

今までうまく機能していました。

ノート : SelectType クラスには約16000行のコードがありますが、それはそれほど大きくはありません。

私はネットで答えから検索し、私は次のようにしました:

  • プロジェクトをきれいにする
  • ADBをリセットします
  • Restartエミュレータ/デバイス/ Eclipse.
  • サードパーティライブラリフィールドがビルドパスでチェックされていることを確認しました

しかし、私はまだそのエラーを得ています。

あらゆる助けがあります。

役に立ちましたか?

解決

あなたが説明したステップはおそらく役に立ちません。

そのことは、Dalvikの問題ではありません。たとえば、Oracle Java VMで同様の検証者が採用されています。簡単な答え: あなたのメソッドは複雑すぎます. 。あなたが見るエラーは主に多すぎることが原因です。

  • パラメーター
  • ローカル変数
  • 例外ハンドラ
  • コード命令

より正確には、この問題はこのスレッドで説明されています。 https://groups.google.com/forum/?fromgroups=#!! Topic / Android-Developers/4QnoidBhyfc.

引用する:

(レジスタ数*命令ワード数)の値は、2 ^ 21より大きい。 (...)それは検証者がアプリのネイティブヒープを吹き飛ばすのを防ぐことを目的としています。

ここで似たようなレポートを見ることもできます。 http://www.mentby.com/group/android-developers/verifyError - 洗浄 - Rejecting-Large-Method.html 問題を解決する方法に関するポインタを使用します。

YEP、Dalvikコンパイラは、メソッド内のすべてのローカル変数に "レジスタ"を割り当てようとします。それはその多くを扱うことができるはずですが、明らかにできません。それらをインスタンス変数とすることで、コンパイラのニーズ/「管理」を削除します(そしてまたメソッドを小さな量の小さい量にする)。

それを解決するために、あなたは一般的に大きな方法を破るべきです(おそらくおそらく onClick()?)より小さな部分に。また、ローカル変数をクラスフィールドに変換すると、同じ問題を持つ人々が何人かの人々に役立ちました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top