背景:由于近期工厂生产,测试突然反馈扫码枪扫sn总是丢失2,比如
AXB2SHS822009997/LSXG 结果显示是 AXBSHS800997/LSX |
于是我叫测试找了之前可以版本然后抓日志进行对比发现,确实只有2这个数字无法扫,如果把2这一位改成其他数字或者字母都是可以正常显示,于是带着这个问题我们做了以下验证。
第一步
7661432800064
1、扫码枪扫机身二维码 都是可以正常扫码
2、扫码枪在产测apk或者系统自带浏览器输入框扫码无法识别2 (xxx版本)
3、7月27版本 装 10月26日 产测apk 直接连hub也是可以用扫码枪扫sn号
4、扫码枪 扫设备主板8701112339000114 实际显示8701 1133 9000 114
第二步:到这里基本排除扫码枪跟产测apk的问题
为了再次确认此异常版本是否可以正常输入2 ,于是我尝试用usb键盘接hub然后连接设备 此时输入2戴上键盘查看输入框也是无法输入2 ,因此问题基本可以锁定,应该哪里keycode把2替换了?
第三步:于是带着这个思路 查看确定异常版本之前以及出现问题版本git log 查看发现 有修改adb user版本连接 尝试还原 make clean全编发现扫码枪扫完包含2的sn还是无法正常显示 ,问题依旧存在!
于是进行下一个git log还原 发现之前同事有改一个物理home键,底层修改示例如下图所示
然后再看Generic.kl 中将之前的home键替换 如下图所示
然后我们再回想一下,USB扫码枪原理跟USB键盘都是外设类似于HID设备,都是通过Usb进行通讯,而且键盘都应是ASCII码,key 3 刚好是 2,我们尝试还原试下,发现扫码枪都无法连接,查看日志一直报remote no such device
而且每次连上USB扫码枪就会有一堆事件keycode上报,这些都是在PhoneWindowManager里面interceptKeyBeforeDispatching拦截处理
第四步:这时候发现这样还原还有问题,于是跟驱动商量把KeyCode 原本是115 改回去,但是对应底层dtsi code也要对应改成115,115对应就是Home键,上层KeyEevent默认一般都是不会去做修改。
然后再编译 用草料或者设备机身二维码去扫,sn包含2或者全部是2都显示正常,如下图log所示
到这里基本结束,这个问题其实也存在历史遗留问题,因此修改尽量保存git log或者git log写的详细一点,不然后面排除起来时间比较长,另外可以结合对应google aosp 8.1源码进行对比。包括正常异常机器日志进行对比,然后分析代码流程。基本就能定位问题。
总结:
1、根据正常异常日志跟代码
2、一般拦截都是在frameworks/base/services/core/java/com/android/server/policy/PhoneWindManager处理
3、跟驱动他们拉齐如果不熟悉底层按键处理这一块
4、根据线上google aosp 8.1源码进行对比 找出差异点
转账请注明出处高通Android 8.1 扫码枪无法扫sn包含2或者全部是2的问题-CSDN博客,谢谢!