【发布时间】:2014-05-25 23:22:40
【问题描述】:
我有一个我一直在开发的 Android 应用程序,现在可以启动了。从 eclipse unsigned 运行它效果很好。当我导出签名副本并运行它时,会发生 NPE。我尝试使用最新提供的 proguard 文件(proguard-android.txt 和 proguard-android-optimize.txt)创建签名版本。两者都没有区别。我通过本地 proguard 配置文件制作的唯一 mod 是留下行号,以便我可以获得不错的堆栈跟踪。
NPE 让我摸不着头脑。我使用锁对象进行同步,并在对象定义中以及流初始化期间对其进行初始化:
public class HttpRequest extends NetworkRequest {
private transient Object lock = new Object();
<snip>
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
lock = new Object();
}
在我的调试版本中,锁永远不会为空,但在我的签名版本中,当我去使用锁对象时,它始终为空。我只能假设 proguard 正在做我不想要的事情,但这是我第一次深入研究 proguard,所以我有点脱离了我的元素。
谁能建议我如何进一步调试?
【问题讨论】:
-
您是否以任何方式序列化此
HttpRequest对象?如果是这样,this question 可能值得一读/复制。 -
@Makoto 但这不应该与混淆无关吗?