最近在做PAD项目,QA提交了一个bug,用iTools管理PAD时,iTools显示的设备与目标机型的设备型号不一致,在其他豌豆荚,百度等手机助手并没有遇到这个问题。为了解决该问题,首先查询机器system目录下的prop.build中关于设备的说明是否有影响。主要包含:
ro.product.model=型号_modle
ro.product.brand=品牌_brand
ro.product.name=手机名称_name
……
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=制造商_manufacturer
但是发现识别的设备名称为其他品牌,可以确定该品牌不是通过prop.build文件获取。另外在测试过程中发现,如果断网的情况下,设备名称会等同于model名称,因此可以知道iTools会根据某个ID,在自己的网上数据库去查找对应的设备型号。
通过用usblayzer查看usb的VID,PID,并对应http://www.linux-usb.org/usb.ids中的VID,发现此VID为某厂商的VID,因此估计iTools是根据USB的VID,PID进行获取对应的设备名称。所以我们将原来的VID PID改成台电PAD的VID与PID,因为台电在断网与联网情况下识别都是与model名称一致。通过查询可以知道VID=18d1是google的,pid为0007.所以修改android4.4/device/softwinner/fiber-a31stm的init.sun6i.usb.rc文件中:
on property:sys.usb.config=mtp
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct 0007
write /sys/class/android_usb/android0/functions ${sys.usb.config}
write /sys/class/android_usb/android0/enable 1
setprop sys.usb.state ${sys.usb.config}
.......
该文件中所有的VID都要修改成一样的18d1,PID可以错开,但是不能与google的注册设备冲突。如下:
VID->18d1 Google Inc.
PID-> 0d02 Celkon A88
2d00 Android-powered device in accessory mode
2d01 Android-powered device in accessory mode withADB support
4e11 Nexus One
4e12 Nexus One (debug)
4e13 Nexus One (tether)
4e20 Nexus S (fastboot)
4e21 Nexus S
4e22 Nexus S (debug)
4e24 Nexus S (tether)
4e40 Nexus 7 (fastboot)
4e41 Nexus 7 (MTP)
4e42 Nexus 7 (debug)
4e43 Nexus 7 (PTP)
4ee1 Nexus 4 / 10
4ee2 Nexus 4 (debug)
4ee3 Nexus 4 (tether)
4ee4 Nexus 4 (debug + tether)
7102 Toshiba Thrive tablet
b004 Pandigital / B&N Novel 9" tablet
d109 LG G2x MTP
d10a LG G2x MTP (debug)
经过修改,设备名称与model名称一致。
总结:iTools连接时,会先用USBVID PID到自己的网络数据库匹配设备名称,如果有网络并且数据库有数据,则采用网络端数据,如果没有网络或者有网络但是数据库没有对应VID PID,则是有model一致型号。