tags:

views:

71

answers:

2

I've got a small issue which I was hoping someone could give me some insight on.

Sometimes, when a user updates my app from the market (from one version to another) they get a VerifyError upon running the app. It happens to a random class; you can use part of the app, then going to a different Activity in the app causes it to blow up. This only happens once; once Dalvik gets it out of its system it never happens again.

Since it only happens once per update (and most of the time, not at all), it is admittedly a minor issue, but I think it reflects badly on my app, so if anyone has any ideas that would be great.

The stack traces don't seem that helpful, since they always happen in a different place (which further confuses me). Here's an example of one:

java.lang.VerifyError: com.mypackage.myapp.package.SomeClass
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1472)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1097)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2371)
    at android.app.ActivityThread.access$1800(ActivityThread.java:118)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1759)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4077)
    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:782)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    at dalvik.system.NativeStart.main(Native Method)
A: 

there should be some lines above that in the logcat output, giving more detail about the verification failure. that might give a clue as to what's going wrong.

Elliott Hughes
A: 

It turns out that I was being caught up with this bug: http://code.google.com/p/android/issues/detail?id=2886

The issue is that if the widget receiver loads before the app, then any attempts to access the Google Maps API in the same process fails. This only happens in Android 1.5, but it would happen each time someone upgrades the app.

The solution was to put the receivers in a different process.

Daniel Lew