关于Unity打包apk安卓真机测试闪退的问题解决方案之一

最近项目进入测试阶段,PC版本已经没有任何问题。进入安卓测试阶段。然而,意想不到的是——闪退!闪退!闪退!

网上找了很多解决方案,使用软件跟踪,打印日志,检查是否有空指针等等。

然并卵、、、、

然后就开始了漫长的修改——打包——测试。。。。一下熬到了半夜两点多、、、最终定位到了结构体。

接收服务器信息,我知道的有两种方法,

第一种,是通过结构体,把数据包去掉包头,然后转换成与服务器打包数据时相同数据类型的结构体,通过结构体获取包里的数据;

第二,去掉包头,按照服务器的结构体,依次读取相应长度的数据。比如,int读4字节。

两种方法都各有利弊,转换结构体,可以让我们更直观看到包内数据的真面目。因为我们服务器端是C++写的,在数据传输的时候,我和服务器商量好,就1字节对齐。测试过程中,感觉C和C#貌似都有严格的数据对齐的限制。测试的时候,我们发现,当数据包长度能被4整除的时候,这个包就没有问题,否则就会闪退。另外,C#在定义结构体的时候加了,StructLayout这个限定声明,这个声明是什么东西,其实我并没搞懂,只是看过大神在声明结构体的时候加上过,逼格很高,就效仿了、、、、嘎嘎嘎、、、

那么接下来,就开始测试字节对齐的BUG,使用了第二种方法,直接从包内读取相应长度,修改、、、、打包、、、测试、、、、通过!!!!!!MMP终于给搞定了。所以说,使用第二种方式,虽然不能直观的看到数据真面目,但是会避免字节对齐的烦恼。

然而,并没有结束、、

那么究竟是不是structlayout这个东东搞的鬼呢?

http://blog.csdn.net/bigpudding24/article/details/50727792

看这个博客,貌似真的是这个家伙搞的鬼,但有待测试。明天测一下。

通过这个文章记录下这个问题,以后再遇到就不迷茫了,也希望给朋友们一个处理闪退的方向。当然,闪退BUG有很多种,能测出来一种是一种!~!!!

你可能感兴趣的:(C#编程语言)