【问题标题】:Android - java.lang.VerifyError on SDK 2.2Android - SDK 2.2 上的 java.lang.VerifyError
【发布时间】:2011-10-16 07:45:23
【问题描述】:

我最近向 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....

}

【问题讨论】:

  • 显示来自com.hookedroid.fishingcompanion.MainFish的代码,否则很难做出假设。
  • 那个Activity的代码有点长,有什么特别的吗?我看看能不能把它缩短到这里发帖
  • 发布所有字段成员和方法签名。还有 onCreate 方法。
  • @Konstantin - 我已经发布了一些代码,如果这就是你要找的,请告诉我。如果没有,我会得到任何需要的帮助。谢谢!
  • 我还没有找到解决这个问题的方法,有人知道为什么会发生这种情况吗?或者也许是我可以研究的方向。谢谢!

标签: java android gson android-2.2-froyo verifyerror


【解决方案1】:

看起来ActionBar 是从 API 级别 11 开始发布的,而 android 2.2 有点旧(API 级别 8)。所以在没有操作栏的情况下尝试一下。我不知道视图是否向后移植到 2.2 平台,但即使是,您的用户仍然可以使用旧的 2.2 版本..

【讨论】:

  • 您在代码中看到的 ActionBar 实际上是自定义实现,而不是 API 级别 11 中的实现,因此它一直完全兼容 1.6。
【解决方案2】:

检查您是否根据正确的 Android SDK 版本进行编译。 AndroidManifest.xml 中的 minSDK 是什么?

【讨论】:

  • 我正在编译正确的 SDK
  • 不,我正在针对 8 进行编译。自 1.6 以来,我没有使用任何类或方法,但会在未来的版本中使用。我明白,如果我确实使用了仅在 1.6 之后可用的任何类或方法,我需要自己优雅地处理它们。
  • 如果您没有使用 1.6 之后添加的任何内容,请针对 1.6 进行编译。那将是确定的。我读到它有时会抛出 VerifyError 而不是 NoSuchMethodException - 所以你可能根本没有处理它。
  • 报告此错误的用户使用的是 2.2 (8),与我正在构建的版本相同。
【解决方案3】:

可能与您编译的 Gson 等库和运行时使用的库不匹配。

参考 - Causes of getting a java.lang.VerifyError

【讨论】:

  • 如果这是真的,难道不是所有设备都如此,而不仅仅是单个设备吗?我有 100 多个用户在 2.2 设备上没有看到这个问题,但只有一个用户在他的 2.2 设备上看到了这个问题。
【解决方案4】:

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

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

【讨论】:

  • 这很可能是问题所在,因为我发现 HTC myTouch 4G 与 stock 2.2 存在错误。这是用户拥有的确切电话,所以我将为他编译一个版本,看看它是否能解决问题。谢谢!
  • 仅供参考,HTC 已经意识到这个问题并将在未来避免它!
猜你喜欢
  • 2012-05-14
  • 2012-04-24
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多