我在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)
答案 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级别,启动服务可能因设备而异。