java - Android - SDK 2.2 上的 java.lang.VerifyError

标签 java android gson android-2.2-froyo verifyerror

我最近在 Market 上发布了我的应用程序,我一直在与一位用户联系,他报告说当他启动我的应用程序时,它会显示“强制关闭/报告”对话框。我要求用户报告错误,这样我就可以看到正在发生的事情的堆栈跟踪,我得到了 java.lang.VerifyError。

据我所知,这要么与外部库有关,要么与 java.lang 中的某些方法与目标 Android SDK 版本不兼容。

用户使用的是 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)

提前致谢!

编辑
根据康斯坦丁的要求添加

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....

最佳答案

有一些设备在内部使用 GSON,但将库公开,当应用程序尝试引用其打包版本的 gson 时会导致命名空间冲突。一种可能的解决方法是更改​​您使用 jarjar 包含的 gson jar 的命名空间。

Heres a thread on the issue - 线程包含对至少一个解决方法的描述,该解决方法由遇到相同问题的另一位开发人员提供。

关于java - Android - SDK 2.2 上的 java.lang.VerifyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6879748/

相关文章:

java - 使用 @JsonFilter 时自定义 Jackson 序列化

android - 如何强制android在内部存储器上安装应用程序

java - 将 java 对象转换为 CSV

java - Spring - RestTemplate 调用 https rest 服务时出错(证书错误)

java - 如何使用POI检查excel中的重复记录?

java - 没有 GUI 的 MouseListener

post - Retrofit 2.0 无法将请求正文转换为 JSON

Android Studio : app theme different in preview, 运行设备和styles.xml

android - 这个 ListAdapter 编辑文本有什么问题?

exception - com.google.gson.JsonPrimitive 无法转换为 com.google.gson.JsonObject 错误