写点什么

ADBLib 在 android 中的使用

  • 2022 年 9 月 13 日
    北京
  • 本文字数:1402 字

    阅读完需:约 5 分钟

ADBLib 在 Android 中的使用

在 android 中,我们使用代码来执行 adb 命令:

Runtime runtime = Runtime.getRuntime();

Process proc = runtime.exec(cmd);

这个方式可以执行一部分的 adb 命令,有一些 adb 命令因为权限不够,而被拒绝。在 android P 以上,权限控制更加的严格,比如获取使用 adb 来获取一些 cpu 的信息,会被拒绝,原因是没有权限执行。那我们这个时候,需要更高的权限来执行 adb 命令,这里就需要使用 adbLib。

网上 adblib 的资料有点少,你需要翻墙才能查找到一些 adblib 的资料,希望这篇文章能对你有一些帮助。如果有错误,请指教。

adblib 的源码比较简单,下面是 adblib 在 github 上的源码地址,代码非常简单:

https://github.com/cgutman/AdbLib

在 google play 上有一个 adblib 的应用,也可以获取这个 apk 的源码,都是开源的。

使用步骤

tcpip 端口变为 5555

生成加密秘钥

获取手机 ip

socket 连接手机 ip + 5555

写入 cmd 命令,读取返回值

1

tcpip 端口修改

手机 usb 连接电脑,执行命令 adb tcpip 5555

如下图:

图中的状态为成功,第一次执行命令,命令行没有返回,也为成功。

2

生成加密秘钥

adblib 生成密钥对象是 Adbcrypto。

生成密钥代码如下:

writeNewCryptoConfig() 方法传递的参数是密钥保存路径,这边使用 getFilesDir() ,保存路径为/data/data/< package name >/files/ 下,密钥为两个文件 private.key 和 public.key,一个公钥,一个私钥。

如下图:

我们读取的代码为:

读写路径也可以自己执行,只要能写入和读取就可以了。

这一步骤需要添加权限:

3

获取手机 ip

上面是用代码来获取手机的 ip 地址,因为我们是在手机内连接建立一个连接,我们可以直接使用:

这样,我们也可以正常使用。

4

socket connect

在 android 中,有一些手机是可以多连接的,但是有一些手机当前只能存在一个连接,如果已经连接成功了,第二次连接将失败。所以我们在重新连接之前要先关闭之前的连接。

如下图:

必须是异步执行,下面是连接代码:

怎么判断我们连接成功了呢:出现如下图所示,表示我们的连接没有问题。下图和我们手机连接电脑时授权的弹窗一样,但是出现的时机不一样。这个是在 android app 首次启动的时候出现的。

至此,我们 adb 就连接成功了

5

写入 cmd 命令,读取返回值

我们可以创建多个 ADBStream 来执行 cmd 命令,获取返回值。

Android 中配置 ADBLib

gardle 配置如下

AndroidManifest.xml

ADBLib 原理

adblib 是一个使用 java 实现的 adb 网络协议的一个库。

在我们说明原理之前,我们首先要知道 adbd

adbd(adbd daemon)

adbd 是手机中运行一个守护进行,在一开机的时候,就启动了,即时杀掉进行,系统也会立即重启。

我们的 adb 命令其实就是 adbd 来处理解决的。

ADBLib 源码都写了些什么

我们查看 ADBLib 的代码,发现通篇的代码就是创建一个 socket, 创建输入流,输出流,还有一些加密信息的代码。然后对输入流,输出流进行管理,大部分都是工具类。

原理

那么,我们就明白了,adblib 其实模拟了一个 adbserver ,来和 手机中的 adbd 进行通信(adbd 后台进程的端口 5555 - 5585)。在使用中,我们在 pc 机器启动一个 adb server,启动手机中的 5555 端口。然后,我们创建一个 socket ,在本地连接 5555 这个端口,在手机内部就是两个端口进行通信, 如下图所示,下面的图片是在网络上扒了一张,描述的是 pc

更多学习资料戳下方

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=CSDN&timestamp=1662711257&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
ADBLib 在 android 中的使用_android_测吧(北京)科技有限公司_InfoQ写作社区