adb使用技巧和usb通信原理探索
adb使⽤技巧和usb通信原理探索
⼀、adb使⽤的技巧
1. 查询当前展⽰的Activity
adb shell dumpsys activity top | head -n 10
dumpactivity
幼儿园教师总结2. 备份和还原所有安装的apk
出设备上安装的第三⽅apk包名: adb shell pm list packages -3
依据apk包名出apk: adb shell pm path $pkg
导出apk⽂件: adb shell pull $path
把导出的apk⽂件安装到新设备⾥: adb install -r $file
脚本:
学习科学发展观
疑惑,第7⾏通过包名查询apk安装路径时,在命令最后添加⼀个&字符,不添加⽆法正常出所有apk路径,不知道什么原由。
3. adb调试wifi模式和usb模式切换
⼿机端(root)
安装terminal
安装terminal
切wifi: setprop p.port 5555全球十大豪车
切wifi重启依然⽣效:setprop p.port 5555
切usb: setprop p.port -1
stop adbd
start adbd
电脑上切换wifi
切wifi: adb tcpip 5555
切usb: adb usb
电脑端连接设备
wifi模式: adb connect ⼿机ip:5555农历三月三日是什么节日
我心中的黄河作文usb模式: 通过usb连接⼿机
⼆、adbs端和adbd端,usb通信原理探索
1. 识别usb设备, 到USB设备信息
lsusb
2. Linux内核识别设备
udevadm monitor --kernel
usb_kernel_monitor接着去查询⼀下device的信息udevadm info -q all -p
usb_kernel_info
3. adbs 访问的device⽂件
启动adbs,查看⼀下进程访问的device⽂件adb start-server ps -ef | grep adb lsof -p $pid
adb_access_device_file
4. adbs源代码分析
调⽤栈
从usb_vendors.c⽂件中,可以知道vendor信息是被"固化"adbs⾥⾯。(那是否就可以解释为啥linux不需要adb驱动呢)
adbs_init_vendorsusb_linux.c⽂件的函数列表
adbs_usb_linux_functions⾥⾯读取函数,主要封装linux usb 通⽤的访问device的⽅式。
5. adbd 访问的device⽂件
adb shell su (root权限) lsof > /sdcard/lsof.data adb pull /sdcard/lsof.data less lsof.data
工商企业管理专业就业前景adbd_access_file
6. adbd源代码分析
调⽤栈
usb_adb_init的内容, 可以确定adbd确实访问了/dev/android_adb⽂件(设备结点)
usb_linux_client.c⽂件定义读取函数,从实现上看它主要通过/dev/android_adb⽂件与外界通信。
adbd_usb_linux_client_function
7. 串联adbs和adbd(android kernel)
android.c和f_adb.c代码所在路径是/drivers/usb/gadget/ 注意:这⾥的代码是kernel的源代码,不是Android的源代码(aosp)。如果你也下载了linux kernel, 会发现没有这两个⽂件的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。