2

最近、自分のアプリケーションをマーケットにリリースしました。あるユーザーから、アプリケーションを起動すると強制終了/レポート ダイアログが表示されるという報告を受けました。ユーザーにエラーを報告するように依頼したので、何が起こっているかのスタック トレースを確認でき、java.lang.VerifyError が返されました。

私が読んだことから、これは外部ライブラリに関係しているか、ターゲットの Android SDK バージョンとの java.lang のいくつかのメソッドの非互換性に関係しています。

ユーザーは Android 2.2.1 を使用していますが、アプリは現在、他の多くの 2.2 デバイスで動作するため、どこから掘り下げるべきかを考えています。

質問: 問題を見つけるために調査を開始するのに最適なものについて、誰か提案はありますか? 必要に応じてコードや詳細情報を提供できますので、お知らせください。

スタック トレースは次のとおりです。

java.lang.VerifyError: com.app.myapp.MainActivity
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1429)
at android.app.Instrumentation.newActivity(Instrumentation.java:1034)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2749)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2866)
at android.app.ActivityThread.access$2300(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2181)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5097)
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:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

前もって感謝します!

EDIT
Konstantinのリクエストごとに追加

MainActivity.java

package com.app.myapp;

//Imports removed

public class MainActivity extends BaseActivity implements Runnable {

private LayoutInflater mInflater;
private SharedPreferences prefs;
private SharedPreferences.Editor prefsEditor;

    ....

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    loadActivity(savedInstanceState);
}

private void loadActivity(Bundle savedInstanceState) {
    setContentView(R.layout.mainlayout);

    ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
    actionBar.setTitle("My App");
    actionBar.setHomeAction(new IntentAction(this, null, R.drawable.ic_actionbar_home));
    actionBar.addAction(new SearchAction(this, R.drawable.ic_actionbar_search));

    weatherThread = new Thread(this);
    try {
        ....Unrelated Code....

        //****HERE WAS THE PROBLEM****//
        Gson gson = new Gson();

        ....More Unrelated Code....
    } catch (JsonSyntaxException ex) { }

    initMembers();
    initControls();

    if (savedInstanceState != null) {
        mSelectedLayout = savedInstanceState.getInt("CURRENT_TAB");
        setCurrentTab();
    }
    else
        loadMainLayout();
}

    ....Other unrelated code....

}

4

4 に答える 4

9

内部で GSON を使用しているデバイスがいくつかありますが、ライブラリを公開しているため、アプリケーションがパッケージ化されたバージョンの gson を参照しようとすると名前空間の競合が発生します。考えられる回避策は、jarjar を使用して含めた gson jar の名前空間を変更することです。

この問題に関するスレッド - スレッドには、同じ問題に遭遇した別の開発者によって提供された少なくとも 1 つの回避策の説明が含まれています。

于 2011-08-12T23:16:28.517 に答える
2

コンパイルした Gson のようなライブラリと実行時に使用されるライブラリとの不一致がある可能性があります。

参照 - java.lang.VerifyError が発生する原因

于 2011-08-12T05:31:22.933 に答える
1

Android 2.2はやや古い(APIレベル8)ですが、 ActionBarはAPIレベル11からのみリリースされたようです。アクションバーなしで試してみてください。ビューが 2.2 プラットフォームにバックポートされたかどうかはわかりませんが、バックポートされたとしても、ユーザーは古い 2.2 バージョンを引き続き使用できます。

于 2011-08-01T06:40:25.990 に答える
0

Check that you are compiling against the correct Android SDK version. What is minSDK in your AndroidManifest.xml?

于 2011-08-10T17:02:00.207 に答える