从Play商店安装时,Android App会崩溃

时间:2013-02-08 21:27:50

标签: android

我有一个我最近提交给游戏商店的应用程序。我测试了.apk文件,一切正常。在第一次安装(从商店) - 您可以登录,但然后它崩溃。这是我从报告中得到的堆栈跟踪:

java.lang.NullPointerException
at com.latlon.InitialSearchActivity.e(Unknown Source)
at com.latlon.InitialSearchActivity.a(Unknown Source)
at com.latlon.InitialSearchActivity.g(Unknown Source)
at com.latlon.InitialSearchActivity.a(Unknown Source)
at com.latlon.MyResultReceiver.onReceiveResult(Unknown Source)
at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:43)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4385)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)

我只是不确定从哪里开始寻找。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

好吧,堆栈跟踪的这一部分是你的代码:

java.lang.NullPointerException
at com.latlon.InitialSearchActivity.e(Unknown Source)
at com.latlon.InitialSearchActivity.a(Unknown Source)
at com.latlon.InitialSearchActivity.g(Unknown Source)
at com.latlon.InitialSearchActivity.a(Unknown Source)
at com.latlon.MyResultReceiver.onReceiveResult(Unknown Source)

调用了班级onReceiveResult()中的MyResultReceiver方法。该方法在a类中调用方法InitialSearchActivity,该方法在该类中调用方法g,该方法在该类中调用方法a,该方法调用方法{{1在那个班里。方法e中有e(即:在该方法中,您尝试使用您认为包含对象引用的变量,而是包含NullPointerException的变量。

看起来方法名称已被混淆,因此您可能需要查看代码以找出真正的方法名称。

答案 1 :(得分:0)

查看Proguard上的文档(这是执行代码混淆的工具)。

您很可能“过度混淆”,这可能会导致部署代码出现问题。就像你看到的一样。

您可以通过编辑“proguard-project.txt”文件来关闭Proguard功能。为确保不发生混淆,请确保此文件中的每一行都已注释掉(通过在每行的开头放置一个哈希 - 或#标记)。

有一个名为retrace的命令,允许您提供取消映射您的混淆。您需要提供proguard创建的一些文件才能使其正常工作。

查看文档以获取完整说明:http://developer.android.com/tools/help/proguard.html

快速修复(以消除Proguard)是对文件进行注释,因此它不会首先运行。

答案 2 :(得分:0)

看起来你使用了一些toole(比如Proguard)来混淆你的代码。 你在混淆之后测试了你的APK吗?

从您上面的日志中发现NullPointerException已经出现在您的代码中,您需要使用混淆工具生成的密钥文件对代码进行反模糊处理,以找出空指针所在的真实位置(代码行)已被访问过。

请注意, 在混淆过程中,有时(人为错误)会导致某些必需的方法被混淆。这反过来导致找不到这些方法,因此可能引发异常(NoSuchMethod)。