网站首页 > 技术教程 正文
一、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
脚本:
#!/bin/sh echo -n "" > apks adb shell pm list packages -3 | sed -E "s/\r$//" \ | while read line do pkg=${line#*:} line=$(adb shell pm path "$pkg"&) path=${line#*:} echo $pkg:$path >> apks done cat apks cat apks | sed -E "s/\r$//" | while read line do pkg=${line%:*} path=${line#*:} adb pull "$path" "$pkg.apk" echo $path done rm apks #echo $apks;
疑惑, 第7行通过包名查询apk安装路径时, 在命令最后添加一个&字符, 不添加无法正常找出所有apk路径, 不知道什么原由。
3. adb调试wifi模式和usb模式切换
手机端(root)
安装terminal
切wifi: setprop service.adb.tcp.port 5555
切wifi重启依然生效:setprop persist.adb.tcp.port 5555
切usb: setprop service.adb.tcp.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
usb_device_info
记录ID,访问网站查看usb设备类型(设备是什么)
http://www.linux-usb.org
可以确实设备的Vendors和设备类型(打印机/Mass Storage等)
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源代码分析
调用栈
main(adb.c) main_adb(adb.c) [ usb_vendors_init(usb_vendors.c) usb_init(usb_linux.c) ] -----new thread---- device_poll_thread(usb_linux.c) find_usb_device(usb_linux.c) kick_disconnected_devices(usb_linux.c)
从usb_vendors.c文件中,可以知道vendor信息是被"固化"adbs里面。(那是否就可以解释为啥linux不需要adb驱动呢)
adbs_init_vendors
usb_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源代码分析
调用栈
main(adb.c) main_adb(adb.c) usb_init(usb_linux_client.c) usb_adb_init(usb_linux_client.c)
usb_adb_init的内容, 可以确定adbd确实访问了/dev/android_adb文件(设备结点)
usb_linux_client.c文件定义读取函数,从实现上看它主要通过/dev/android_adb文件与外界通信。
adbd_usb_linux_client_function
7. 串联adbs和adbd(android kernel)
init(android.c) usb_composite_register[&android_usb_driver](android.c) android_bind(android.c) usb_add_config[cdev, &android_config_driver](android.c) android_bind_config(android.c) adb_function_add(f_adb.c) misc_deregister[&adb_device](f_adb.c) static struct miscdevice adb_device = { .minor = MISC_DYNAMIC_MINOR, .name = shortname, .fops = &adb_fops, }; static const char shortname[] = "android_adb";
android.c和f_adb.c代码所在路径是/drivers/usb/gadget/ 注意:这里的代码是kernel的源代码,不是Android的源代码(aosp)。如果你也下载了linux kernel, 会发现没有这两个文件的。
- 上一篇: N930X音乐芯片四种功能型号的MP3芯片
- 下一篇: U盘文件自动拷贝的软件
猜你喜欢
- 2024-09-24 基于RT1052 Aworks使能U盘功能(十九)
- 2024-09-24 嵌入式入门级学习——基于国产平台T3开发板的测试教程(3)
- 2024-09-24 温馨呵护、音乐相伴!N9300音乐芯片在婴儿安抚器上的突破与应用
- 2024-09-24 「嵌入式必学」eMMC读写、SATA接口测试——基于全志T3平台(3)
- 2024-09-24 雅马哈RX-A8A/RX-A6A/RX-A4A功放8K60 4K120固件更新1.65来了
- 2024-09-24 U盘文件自动拷贝的软件
- 2024-09-24 N930X音乐芯片四种功能型号的MP3芯片
- 2024-09-24 《UEFI内核导读》Mass Storage Driver
- 2024-09-24 还在花20元去电脑城?系统重装不求人,记住只修电脑不过夜!
- 2024-09-24 MP3音乐芯片有哪些?N930X音乐芯片核心特征!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)