Android学习总结(2016.08.13)——adb及其组成和adbd的权限问题

adb及其组成

adb全称为Android Debug Bridge,他是一个命令行工具,一般存放于sdk目录下的platform-tool文件夹里。利用adb可以实现PC和android设备的交互。合理使用adb可以大大提高效率。

adb由三个部分组成,分别是adb client,adb daemon,和adb server。这三个部分关系如图

Android学习总结(2016.08.13)——adb及其组成和adbd的权限问题_第1张图片


adb client

adb client可以理解成adb在PC上的一个客户端,每当用户发起一个adb命令时,PC都会开启一个后台client进程来负责这个命令。

adb server通过5037端口监视着adb client,而adb client则通过这个端口与adb server通信

开启adb client时,系统会先检查后台是否已经存在一个adb server进程,若不存在则先开启adb server进程再开启adb client进程

adb daemon (adbd)

adb daemon可以理解为adb在android端上的一个客户端,当android设备连接到PC之后,adb daemon这个后台进程就会启动。实际上adb命令在android设备上的执行就是通过adb daemon来完成的

当PC识别到android设备的连接时,就会从范围为5554-5585的端口中分配两个连续的端口供其使用,所以一台PC最多同时连接16台android设备

对于PC分配到的两个端口,adb daemon使用奇数端口与adb serever进行通信,而偶数端口使adb server用来与android设备进行直接交互的

adb server

adb server可以理解成adb的服务端,他是PC上的一个后台进程。
从前面的介绍中也可以看出,adb server负责管理adb client以及负责与adb daemon进行通信,同时他可以和android设备进行交互
当adb server开启之后,他会自动绑定并且监听5037端口,接收client通过该端口发送过来的命令。同时server还会扫描5555-5585间的奇数端口以定位已经连接的android设备

adbd(adb daemon的权限问题)

对于adb命令,root权限是一个大坑。

在android系统中,一些操作是需要root权限的,如对data目录进行访问和读写。若没有root权限,是不能通过adb命令来完成这些操作的。
最坑的是,对于普通的用户机即使是已root用户,系统会禁止adbd以root权限运行,使adbd以“安全”的模式运行,除非你用的是工程机(ENG版)
如果在cmd中输入adb root 命令,就会报出错误“ adbd cannot run as root in production builds rooted”
因为adbd被保护起来了,所以运行adb命令仍然是以普通用户身份执行,除非显式切换到管理员用户。
切换管理员用户的方法:
输入adb shell进入手机shell,然后输入su来切换到管理员用户
对于此方法,每次都要su非常麻烦,而且对于非shell层的命令不能以管理员用户执行。例如adb install一个apk时会显示permission denied导致安装失败

如何让adbd获取root权限

法一:在shell下使用su命令,上面已经提过了,不好用
法二:把手机系统刷成ENG版。要刷机麻烦,不推荐
法三:修改android系统,修改adbd的root权限,时其启动时直接以root权限启动。还是要刷机,而且一不小心就会变砖头
法四:使用提权软件强行让adbd获取root软件。如adbd Insecure(超级adbd),Google Play地址
 

你可能感兴趣的:(android)