1

我有一个最近提交到 Play 商店的应用程序。我已经测试了 .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)

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

4

3 回答 3

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被调用了。该方法调用了类中的方法aInitialSearchActivity该方法调用了该类中的方法,该方法调用了该类中的方法g,该方法调用了a该类中的方法e。在方法e中有一个NullPointerException(即:在该方法中,您尝试使用您认为包含对象引用的变量,但该变量包含null.

看起来方法名称已被混淆,因此您可能需要查看代码才能弄清楚真正的方法名称是什么。

于 2013-02-08T21:35:41.323 回答
0

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

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

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

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

检查文档以获得完整的解释:http: //developer.android.com/tools/help/proguard.html

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

于 2013-02-08T21:49:04.507 回答
0

看起来你使用了一些工具(比如 Proguard)来混淆你的代码。您是否在混淆后测试过您的 APK?

从上面的日志中,您的代码中发生了 NullPointerException,您需要使用混淆工具生成的密钥文件对代码进行去混淆,以便找出已访问空指针的真实位置(代码行) .

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

于 2013-02-08T21:49:29.533 回答