首页 > QQ活动 > 安卓手机QQ打开图片闪退是怎么回事 图片怎么处...

安卓手机QQ打开图片闪退是怎么回事 图片怎么处理可以闪退

时间:2016-06-29 15:09 作者:QQ地带 我要评论

 
 
至于Android M及以下的系统中崩溃的原因,考虑到是 SIGBUS ,可能是非对齐的内存访问,于是试着改了一下:
(external/jhead)
 
  1. diff --git a/exif.c b/exif.c 
  2. index 8dfdaf1..fa9fd99 100644 
  3. --- a/exif.c 
  4. +++ b/exif.c 
  5. @@ -453,7 +453,7 @@ double ConvertAnyFormat(void * ValuePtr, int Format) 
  6.   
  7.          // Not sure if this is correct (never seen float used in Exif format) 
  8.          case FMT_SINGLE:    Value = (double)*(float *)ValuePtr;      break; 
  9. -        case FMT_DOUBLE:    Value = *(double *)ValuePtr;             break; 
  10. +        case FMT_DOUBLE:    memcpy(&Value, ValuePtr, sizeof(double));break; 
  11.   
  12.          default: 
  13.              ErrNonfatal("Illegal format code %d",Format,0); 
 
应用之后无法复现此bug了:
 
 
 
测试机型是OnePlus One,CM13.0-20160408-NIGHTLY
 
不知道其他格式的转换有没有问题,反正关于这类图的问题无法复现,就这样好了[doge]
 
 
 
 
 
更新一发自制这类图的尝试:
这是EXIF规范的一点微小的解释(人家真的是这么说的)
 
 
据说是曝光时间的锅?那么来改了试试:
曝光时间的 Tag 是0x829a,这个文件的EXIF信息指示字节序是 Motorola 风格(大端),于是这个 Tag 在文件中的表现就是0x829a
搜索到这个 Tag 
82 9A 00 05 00 00 00 01 00 00 01 C6
本来的类型是0x5(比值),改成0xc(双精度浮点)
保存,传到手机上。
 
这是修改后的图,大家可以试试看有没有问题……(我这里知乎客户端点大图就挂了)
 
注意:上面的过程中没有验算是否出现了对齐问题,因为基础地址会在哪里并不能提前得知……所以这张图能复现bug也许是个巧合 
 
注意2:如果要实现在QQ里崩溃的效果,需要想办法避免二压。这里大家就自己开脑洞吧~
 
貌似并不是所有人点大图都会出问题,比如部分华为(基于 Android 6.0 的版本)和三星的设备。不清楚是不是它们的固件里已经打了针对此问题的补丁。基于 AOSP 的第三方固件几乎全军覆没……
 
如果存了 bug 图导致相册打不开,可以参照其他答案的方法来删除有问题的图片。比如 Root Explorer、终端模拟器、adb shell。
 

标签: 手机QQ
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告