相同的崩溃会根据设备产生不同的堆栈跟踪

时间:2014-12-30 23:06:27

标签: android stack-trace

我在Google Play上有一个应用程序遭遇由空指针异常调用的崩溃。在Google Play开发者控制台上查看崩溃的堆栈跟踪时,即使Android版本相同,堆栈跟踪报告的行号也会因设备而异。由于这是Android SDK代码,并且它与Android的版本相同,为什么行号不相同?

我有几个猜测:1。)Google Developer Console将这些设备报告为Android 4.4,但它们可能有不同的4.4.x版本。 2.)这些是不同的设备,因此制造商已经更改了SDK中的一些代码以考虑每个特定设备。

非常感谢所有帮助,下面复制了示例堆栈跟踪。

此堆栈跟踪来自运行Android 4.4的三星设备:

  

java.lang.RuntimeException:无法创建服务com.richardlucasapps.netlive.MainService:java.lang.NullPointerException:storage == null   在android.app.ActivityThread.handleCreateService(ActivityThread.java:2830)   在android.app.ActivityThread.access $ 1900(ActivityThread.java:174)   在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1389)   在android.os.Handler.dispatchMessage(Handler.java:102)   在android.os.Looper.loop(Looper.java:146)   在android.app.ActivityThread.main(ActivityThread.java:5593)   at java.lang.reflect.Method.invokeNative(Native Method)   在java.lang.reflect.Method.invoke(Method.java:515)   在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)   at dalvik.system.NativeStart.main(Native Method)   引起:java.lang.NullPointerException:storage == null   at java.util.Arrays $ ArrayList。(Arrays.java:38)   在java.util.Arrays.asList(Arrays.java:155)

这是来自不同的设备,但它也在运行Android 4.4:

  

java.lang.RuntimeException:无法创建服务com.richardlucasapps.netlive.MainService:java.lang.NullPointerException:storage == null   在android.app.ActivityThread.handleCreateService(ActivityThread.java:2585)   在android.app.ActivityThread.access $ 1800(ActivityThread.java:138)   在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1281)   在android.os.Handler.dispatchMessage(Handler.java:102)   在android.os.Looper.loop(Looper.java:136)   在android.app.ActivityThread.main(ActivityThread.java:5111)   at java.lang.reflect.Method.invokeNative(Native Method)   在java.lang.reflect.Method.invoke(Method.java:515)   在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:780)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596)   at dalvik.system.NativeStart.main(Native Method)   引起:java.lang.NullPointerException:storage == null   at java.util.Arrays $ ArrayList。(Arrays.java:38)   在java.util.Arrays.asList(Arrays.java:155)

1 个答案:

答案 0 :(得分:2)

看起来和我一样,看到这个共同的路线, Caused by: java.lang.NullPointerException: storage == null at java.util.Arrays$ArrayList.(Arrays.java:38) at java.util.Arrays.asList(Arrays.java:155)

MainService类的某个地方,您似乎正在尝试将空数组转换为List。 让我们通过查看code for Arrays.asList

进行确认
    public static <T> List<T> asList(T... array) {
        return new ArrayList<T>(array);
    }

好的,所以这会调用一个also in Arrays.java的构造函数:

    ...
    ArrayList(E[] storage) {
        if (storage == null) {
            throw new NullPointerException("storage == null");
        }
        a = storage;
    }
    ...

这是来自storage == null漫画的地方。我的建议是,检查你的应用程序中的null数组使用情况。

  

为什么行号不一样?

那些不同的行与android框架有关,在这种特殊情况下,它如何启动你的服务,然后在启动时发现一个Null Pointer并失败。根据制造商和API级别,启动服务可能因设备而异。