无需电脑如何执行adb shell命令

新玩意儿。

Posted by YSY on February 18, 2022

背景

ADB(Android Debug Bridge),是调试Android设备的一个命令行工具。对开发者来说,ADB自然是日常工作的得力助手;对我们业余玩家来说,它也可以用来控制一些默认情况下接触不到的功能设置。

在早期的Android平台上,我们只能通过USB数据线连接电脑和手机,然后再在电脑上使用ADB工具,前提是已经在开发者选项中开启了USB调试开关。

从Android 10开始,Google看着大家那可怜的USB接口数量和满桌的数据线,无奈之下推出了一个无线调试功能。只需要电脑和手机连接到同一个WiFi(即在同一局域网下),就可以进行调试。

虽然简化如此,但用户还是需要一台电脑才可以执行ADB的相关命令。比如说我想随时随地“冻结”某个应用:

adb shell pm disable-user com.tencent.mm

还得身边有一台安装了Android开发工具的电脑,挺麻烦的。

本地ADB

既然现在新设备已经支持无线调试,我们是不是可以把手机本身当作电脑,让它自己连接自己呢?相当于手机本身既是ADB Server也是Client,同时也满足在同一局域网的条件。

是的,已经有大神想到这个点子并开发了一个工具应用:LADB,顾名思义即Local ADB,在本地的ADB。基于GPL协议开源:github.com/tytydraco/LADB

我们安装后试一试效果,目前看起来功能还是挺简单的,就一个Shell窗口。简单使用步骤:

  1. 先连接任意一个WiFi,就算没有接入互联网都可以;
  2. 然后打开LADB,将它调整为小窗模式(或分屏模式),因为无线调试的配对码等信息每次点击都会动态生成,所以才需要小窗模式同时打开本应用和开发者选项;

  1. 进入开发者选项,开启无线调试,首次使用需要配对设备,将配对码和端口填入本应用即可。成功以后,下次再使用就会自动连接了。

我们不仅可以使用adb shell相关的命令,还可以使用Linux系统中一些常用的命令。这样即便没有电脑,也可以做部分调试了,而且访问权限会比其他类似的模拟终端应用(诸如Termux)高一些。

后话

我们仍然不能使用LADB这个应用来执行类似如下命令:

adb root
adb reboot
adb install
...

因为LADB只是向用户开放了adb shell输入,所以也只能执行 adb shell xxx 这样的命令(比如上文提到的停用应用)。从它的源码来看是将整个ADB工具编译到移动平台的,我猜也是考虑到安全原因吧没有暴露除shell以外的其他命令输入。

我基于原作者的开源代码做了一些Shell使用上的优化,其他功能基本不变,感兴趣的同学可以下载体验。