百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

adb使用技巧和usb通信原理探索(adb使用技巧和usb通信原理探索哪个好)

cac55 2024-10-07 06:30 12 浏览 0 评论

一、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, 会发现没有这两个文件的。

相关推荐

怎么设置电脑开机自启动项?

电脑开机自启动项是指在电脑开机时自动启动的程序。例如,我们经常使用的一些软件,如QQ、微信、迅雷等,可以设置成开机自启动,这样我们在电脑开机后就不需要再手动打开这些软件了,可以直接使用。本文将介绍如何...

Windows 10 开机自动启动程序设置全攻略

在日常使用电脑的过程中,我们经常会希望一些常用程序能够在开机时自动启动,以便提高工作效率。那么在Windows10中,如何设置开机自动启动的程序呢?今天,我们就来详细介绍几种常见的方法,帮助大家...

如何关闭电脑开机时自动弹出的右下角热点新闻窗口?

如何关闭电脑开机时自动弹出的右下角热点新闻窗口?有用户发现,当电脑开机时,桌面右下角会自动弹出一个带有热点信息的窗口。这种情况就是我们的电脑里存在一些广告程序。当我们的电脑打开并连接到互联网时,...

Mac系统自启动管理

你有没有在Mac系统安装了一个软件后,发现每次重启电脑的时候,他都自动打开来,这种情况就是有些软件打包的时候就设置了开机自动启动,个人觉得有点流氓。那么我们怎么能取消掉开机启动呢?首先,我们打开系统偏...

Windows 10下多标签的文件资源管理器来了(文件夹高效操作)

我们使用网页浏览器一般都有多标签(多选卡)功能,但文件资源浏览器却没有这个多标签功能,挺不方便的,之前有一个Clover可实现这个功能,现在360也出了一个多标签文件管理器(360文件夹),截止到20...

Win7Win10添加开机自动运行软件的技巧方法(亲测可用)

Win7管理开机启动项的方法:1、使用快捷组合键“win+R”打开“运行”;2、输入“msconfig”3、点击“确定”打开“系统配置”;4、点选“启动”项,进入到启动项管理界面,然后就可以开启或关闭...

怎么设置和禁用电脑开机自启动程序?

大家好,这篇文章给大家分享的是关于“怎么设置和警禁用电脑开机自启动程序?”的相关内容,欢迎查阅。在电脑上设置开机自启动程序可以让您的常用软件在开机后自动启动,比如常见的杀毒软件等一般都是自启动程序,他...

Win10开机启动项设置全解(下)

IT之家(www.ithome.com):Win10开机启动项设置全解(下)IT之家刚刚在《Win10开机启动项设置全解(上)》里面介绍了在Win10系统中对于启动项启用和禁用的相关操作的内容,下面我...

电脑开机后无限重启怎么办?

计算机在几秒钟内无限重启的问题更加令人头疼。那么是什么原因造成的呢?有什么解决方案?一、软件原因1、当病毒“冲击波”病毒来袭时,它将提示系统在几秒钟内自动启动。木马程序可以远程控制计算机的所有活动,包...

Clonezilla 自动化之-启动时自动挂载 Webdav 共享文件夹

1、核心结论因Webdav配置文件davfs2.conf未做参数优化,导致Clonezilla自动挂载的Webdav目录镜像恢复正常,但镜像备份报错(Linux系统可能正常),要解决这...

win10 NFS+黑群晖远程加载管理Windows文件夹(读写NTFS格式+高清播放器)

作者:火麒麟11之前也写过一篇远程加载的无奈之举,因为百度了很久教程都没有很详细的,只找到一篇高手的文章,但是我本人小白一个,按照高手的做,搞了一天都没有搞定,也不知道错在那,所以只能先远程加载应急...

Windows 10 每次开机都自动弹出 “今日热点”、“热点资讯” “360每

问题:每次打开Windows10时,都会自动弹出“今日热点”、“热点新闻”、“360天天趣”的广告窗口:很烦人,有时候正常使用的时候会自动弹出!解决方案:右键任务栏-【任务管理器】-右键【今日热门话...

Windows设置软件开机自启动

我们希望电脑开机以后自动运行一些程序,例如向日葵、ToDesk远程软件;微云同步助手等备份软件,可以帮助我们在无人操作电脑的状态下,开机就可以自动执行操作。本期简介:在Windows系统中如何设置软件...

生活小技巧006:批处理实现程序开机自动启动

这次来衡阳部署智能应用发现部署完之后需要启动很多的后台程序来支持服务的运行,这就导致每天开机都需要重复的去启动大量的程序(测试期间服务器晚上会关闭)。作为程序员的我们怎么能够容忍这种事情发生呢?开机启...

禁止Excel启动时自动新建工作簿

通过双击桌面Excel图标启动Excel时会默认自动新建一个空白工作簿,这给需要新建工作簿的用户带来方便。但大多数情况下,我们通过这种方式打开Excel后只是要对某个已存在的工作簿进行编辑,而不需要新...

取消回复欢迎 发表评论: