解决T1上1.0.20版本阴阳师打开现世召唤卡死的问题

问题描述:本人是锤子T1用户 , 上周更新了最新的1.0.20版本的阴阳师之后 , 发现跟摄像头有关的游戏功能都出问题了 , 现象如下:
1、进入“式神歌舞” , 摄像头一直加载不出来 , 过了一会就直接闪退回到“庭院” , 并提示“需要打开相机权限”;
2、进入“现世召唤”和“现世逢魔” , 摄像头一直加载不出来 , 并一直停留在加载页面 , 按“返回键”没有用 , 只能强制杀进程退出;


问题分析:
一开始我以为是权限问题 , 进安全中心的权限管理检查了几遍阴阳师的摄像头权限 , 发现摄像头权限已经打开 , 我试着开关几次 , 甚至关掉整个权限管理 , 都没有用 。
接着 , 我怀疑是不是我的渠道包(非官方)下载得不完整或安装少了什么文件 , 我又重新下载重装了几遍 , 也没有用 。
再者 , 我怀疑是不是我的渠道包本身就有问题 , 我又下载了官方的安装包进行安装 , 也没有用 。
然后 , 我在应用商店和论坛发现其他T1用户更新了新版本后都出现同样的问题了 , 基本可以确定是手机兼容性问题了 。
兼容性问题就比较麻烦了 , 我打听过其他品牌手机 , 好像没这个问题 , 网易不会为了锤子用户特意适配一版 , 而锤子科技又不会为了阴阳师这个游戏特意更新一版系统(再说 , T1不是已经停止维护了么 , 唉) 。但是 , 上一版(1.0.17版本)的“现世召唤”还是可以用的 , 是更新最新一版(1.0.20版本)之后才有问题 。所以 , 可以分析两版有什么不同 , 说不定就能找到原因 , 对症下药了 。

调试过程:(省略了繁琐、重复的验证步骤)
1、抓log , 从log中的一条错误信息“error: FPS range value not supported” , 可推测 , 应该是在打开摄像头时设置的帧率不在支持的范围之内 , 导致打开摄像头异常 。
2、分析源码 , 反编译1.0.17版本和1.0.20版本的apk , 找到打开摄像头的功能模块 , 对比两份smali代码 , 发现两版的在设置帧率的方式上有所不同 , 1.0.17版本是直接设置帧率为30 , 而1.0.20版本是使用了一个来历不明的参数作为帧率 。我猜测 , 新版是为了动态适配各类型号的手机 , 所以加了一层分析 。但对于T1来说 , 上版的30帧率是可用的 , 所以在新版直接使用30帧率应该也是没有问题的 。
3、修改1.0.20版本的帧率设置 , 直接设置为30帧率 , 然后重新编译apk , 重新安装apk后 , “式神歌舞”和“现世召唤”功能已可以正常使用 , 由于现在不在时间段 , 没能验证“现世逢魔”的功能 , 但是原理是一样的 , 所以也应该是没问题了 。

解决方案:

以上的调试过程看起来挺复杂的 , 但是最后解决方法还是比较简单 , 步骤如下:
1、下载安装反编译工具Android Killer V1.3.1.0 , 反编译apk、修改源码、重新打包apk全靠它 。
2、打开Android Killer , 将阴阳师的apk拖放进去 , Android Killer会自动解析apk生成工程 。在解析过程中会弹出提示框“是否需要对当前工程进行分析” , 分不分析无所谓 , 直接选“否”就可以 , 解析后在左侧会显示apk的工程信息和目录 。

推荐阅读