ADB无线调试的那些事

2023-03-29  本文已影响0人  肥得流油

接触到安卓开发以来,几乎所有的调试场景都需要用到ADB
即 [Android Debug Bridge],直译就是安卓调试桥。它的功能可谓是非常强大,是 Android 开发/测试/设备搞机玩家的骚操作工具
用了这么久的ADB,最舒服的就是它的无线功能。用它可以轻松的实现,文件的上传下载,软件的安卓和下载,模拟触控,以及投屏的实现。可以说只要你想象力足够丰富,能玩出花来

自从安卓11之后,默认可以系统开启无线功能,在信任的设备上,可以不用有线连接,直接就可以使用无线调试。可以说是非常的方便。

具体方法:

保证设备与电脑连接到同一个局域网,在开发者选项中启用无线调试。
在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。
选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号:
adb pair ipaddr:port
提示Enter pairing code: 时输入手机弹窗中的配对码
成功后会显示Successfully paired to ...
connect 命令连接 :
adb connect ipaddr:port
确认连接状态:
adb devices

那在安卓11版本之前,有什么办法可以让安卓设备(已经root的)开机就开启无线调试呢?
当然有啦!
正好最近遇到了一个开发板子是5.1老系统,每次调试都需要用到数据线,觉得简直是非常的麻烦。
于是搜集了一些将设备设置为默认开启wifi调试adb的操作。

方法一(适用于安卓7.1/8.1):

使用以下命令获取设备的root权限,这个步骤需要您的设备已经root:
adb root
使用以下命令挂载system分区为可写状态:
adb remount
使用以下命令修改build.prop文件:
adb shell "echo 'service.adb.tcp.port=5555' >> /system/build.prop"
adb shell "echo 'persist.service.adb.enable=1' >> /system/build.prop"
//重启、测试
adb reboot

方法二(与方法一原理一样):

//以此输入:
adb root
adb remount
adb pull /system/build.prop
//在电脑上直接修改文件,再将修改后的文件push回去
adb push build.prop /system/build.prop
//重启、测试
adb reboot

方法三:
如果以上两种方法都不行,但是设备已经获得了root权限,则可以直接通过自己的app代码中直接进行shell命令开启调试端口:

    su  //获得root权限
    setprop  service.adb.tcp.port 5555  //开启网络调试端口
    stop adbd //关闭adb
    start adbd //开启adb (也可以使用restart adbd 如果无效再先关闭后打开)

方法三可以直接应用到 自己写的app中:

    /**
     * 设置无线adb
     * @param state
     */
public void setWifiAdb(boolean state) {
    if (state) {
        execShell("setprop service.adb.tcp.port 5555");
        execShell("stop adbd");
        execShell("start adbd");
    } else {
        execShell("setprop service.adb.tcp.port 5555");
        execShell("stop adbd");
        execShell("start adbd");
    }
}
    /**
     * 发送shell命令
     * @param str
     */
    public void execShell(String str) {
        try {
            // 权限设置
            Process p = Runtime.getRuntime().exec("su");
            // 获取输出流
            OutputStream outputStream = p.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(
                    outputStream);
            // 将命令写入
            dataOutputStream.writeBytes(str);
            // 提交命令
            dataOutputStream.flush();
            // 关闭流操作
            dataOutputStream.close();
            outputStream.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

想起刚刚工作的时候,那时候微信小程序"跳一跳",很流行。
那时候在朋友圈里为了刷排名,就通过adb连接到手机,再用python跑自动跳的脚本。
刷到9999+,荣登排行榜第一,可惜不到两小时便被系统判定为违规。
时光匆匆啊,喜欢出风头的年纪就这么过去了。


上一篇 下一篇

猜你喜欢

热点阅读