Android 设备 设置adb自动监听tcp 5555端口,重启有效

2023-11-13

Android 设备调试有两种连线方式:有线和无线;

有线是通过USB导线连接android设备和电脑端,无线方式是通过连接WIFI,通过TCP的方式,连接设备和电脑端,一般用 5555端口;

有线的调节,只需要打开调试模式基本就可以了,无线连接方式比有线多一步操作,就是需要先通过usb导线连接后,adb 命令行:adb tcpip 5555  开启tcp 连接5555端口;

正常过程是这样的,但是日常开发的时候经常遇到,没有带线,没有笔记本备用,设备不在身边(在隔壁)的情况,设备每次重启都会关闭tcp 555端口,不可能每次都需要拿着电脑/导线去设备前调试,而且,公司没有给我配置笔记本```

这个情况下,就需要设置adb 自动监听5555端口,而且需要重启有效,

说明 : 该情况适用于 root 的设备;

1.adb 查看root权限

我们先通过导线连接设备,通过adb 命令判断,命令行输入 adb shell,#代表已经root过,$代表没有root权限;

(还好还好,我们的屏/设备 属于root过的设备,具有root权限)

2.修改文件

修改/default.prop或者/system/build.prop文件

//添加这一行
service.adb.tcp.port=5555

文件后可以添加这一行

但是你会发现/system 文件夹是只读权限的.

你可以通过如下的命令查看该文件权限;

adb shell ls -l /system

这个是我修改后的,你可以看看你的;

要修改build.prop文件,是修改不了的,所以需要解决的是如何修改;

3.Android9.0挂载system文件夹读写

我们知道在Android系统中,system文件夹一般都是只读属性,不管你是root用户还是普通权限用户,所以在开发中,如果我们想要访问和修改system文件夹下的内容的话就需要获取system文件夹的写属性,而因为Android版本的变化,在不同版本下system文件夹修改读写属性的方式也有较大的区别。


Android 8.0以下版本
第一步:要得到system分区的全名
adb shell 
mount 
rootfs / rootfs ro 0 0 
tmpfs /dev tmpfs rw,mode=755 0 0 
devpts /dev/pts devpts rw,mode=600 0 0 
proc /proc proc rw 0 0 
sysfs /sys sysfs rw 0 0 
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 
none /dev/cpuctl cgroup rw,cpu 0 0 
/dev/block/mtdblock0 /system yaffs2 ro 0 0 
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0 
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 

从/dev/block/mtdblock0 /system yaffs2 ro 0 0 部分可以看得出/system的权限是ro即是read only。

第二步:根据名称重新挂载
mount -o remount /dev/block/mtdblock0 /system 
mount 
rootfs / rootfs ro 0 0 
tmpfs /dev tmpfs rw,mode=755 0 0 
devpts /dev/pts devpts rw,mode=600 0 0 
proc /proc proc rw 0 0 
sysfs /sys sysfs rw 0 0 
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 
none /dev/cpuctl cgroup rw,cpu 0 0 
/dev/block/mtdblock0 /system yaffs2 rw 0 0 
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0 
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

可以看到/dev/block/mtdblock0 /system yaffs2 rw 0 0,/system拥有rw的权限。

如果要改回去ro权限的话,执行:

mount -o remount,ro /dev/block/mtdblock0 /system 

当/system 目录为读写权限后,就可以随意删除或者替换系统应用了。

Android 8.0以上版本

在Android8.0以上通过以上mount命令,你会发现找不到/system代表的节点和拥有的权限信息,这是因为Android8.0之后谷歌加入了A/B system的特性,system分区跟ramdisk分区打包在一起,因此系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。所以/proc/mounts文件中没有包含/system的权限信息,此时如果使用上面的命令:
 

mount -o remount,rw /system 

重新挂载/system分区会报错:

mount: '/system' not in /proc/mounts

因此使用这条命令是不可行的,需要使用下述的命令:

mount -o remount -o rw /

使用这条命令可以临时挂载上/system文件夹,直到下一次重启。
其实为什么root用户会出现/system文件夹无权限写的情况的话,主要原因是/system所属的用户组不是root,而是system用户组,所以需要重新挂载。
当然上面方法不能挂载/system目录的话而且提示“’/dev/root’ is read-only”的话,那么是因为你的设备开启了avb,此时就只能通过下面的方式完全重新挂载整个系统(当然,我暂时没遇到这个情况,大家可以留意一下):
 

adb root
adb disable-verity
adb remount

如果adb disable-verity提示需要解锁OEM的话,那么还需要先解锁OEM:

adb reboot fastboot
fastboot oem unlock
fastboot reboot

提示解锁成功的话,重新执行命令就不会报错了。

4.再修改/system/build.prop

这个时候你就只可以直接操作/system文件夹下的文件了, adb pull,adb push 都可以用了,不过有没有办法可以在android shell中编辑这些文件(比如Linux shell中的vim编辑器)呢,

我看到有个文件说你可以用cat命令,好吧

您可以使用以下方法创建文本

 $ cat > filename.txt

您可以使用以下方法向文本文件添加行:

 $ cat >> filename.txt

两个命令都可以使用终止ctrl-D.

大家也可以试一下,这个也行,cat file文件还可以查看内容~~~

当然,我最后用的还是adb pull到本地,修改后直接adb push~

5.测试一下

这个时候直接新开一个命令窗口,直接adb connect IP:5555,好吧,我尝试的第一次没反应,然后我直接adb  reboot,重启之后重新adb connect IP:5555,竟然真的成功了!然后我重新关机重启,还是可以的,

6.收尾操作

为了设备安全,我们功能完成之后别忘了恢复只读权限

//设置可读写权限
# mount -o rw,remount /system

//恢复只可读
# mount -o ro,remount /system

至此,就算结束了,重启手机还是会生效的

7.代码实现(还未实现)

下面是我打算用代码/程序实现该功能的草稿,下面的函数方法去实现(主要方法)

public void openPort5555()
{
    try 
    {
        String cmds[] = {
            "setprop service.adb.tcp.port 5555",
            "stop adbd",
            "start adbd"
        };
        for (int i = 0; i < cmds.length; i++)
        {
            java.lang.Process process = Runtime.getRuntime().exec(cmds[i]);
            int exitCode = process.waitFor();
            if (exitCode != 0) 
            {
                throw new java.io.IOException("Command exited with " + exitCode);
            }
        }
        Toast.makeText(this, "Listening on port 55555...", Toast.LENGTH_LONG).show();
    } 
    catch (Exception ex) 
    {
        ex.printStackTrace();
        Toast.makeText(this, "An error has occurred: " + ex, Toast.LENGTH_LONG).show();
        
    }
}

大家可以尝试一下;

8.drwxrwxrwx

前面的 d 表示这是一个文件夹,后面的 rwxrwxrwx 则表示文件夹的权限:

第 1 个字符表示文件类型(d 表示目录,- 表示普通文件)
第 2~4 个字符表示文件所有者的权限(rwx 表示可读、可写、可执行)
第 5~7 个字符表示文件所在组的权限(rwx 表示可读、可写、可执行)
第 8~10 个字符表示其他用户的权限(rwx 表示可读、可写、可执行)
在这个例子中,文件夹 /sdcard/myfolder 的权限为可读、可写、可执行,无论是文件所有者、文件所在组还是其他用户。

在 Linux 系统中,文件和目录都有属主(owner)和属组(group)。

文件所有者(owner)指的是文件或目录的拥有者,拥有者有最高的权限,可以对文件或目录进行任何操作。

文件所在组(group)指的是文件或目录所属的组,该组中的用户具有一定的权限,能对文件或目录进行特定的操作。

其他用户指的是除了文件所有者和文件所在组的其他用户,这些用户通常拥有最低的权限,只能进行特定的操作。

Linux 系统中的文件和目录权限是以用户身份和用户组身份来区分的,每个文件或目录都有三组权限,分别是文件所有者的权限、文件所在组的权限和其他用户的权限。

第8项 属于水文字的,大家了解一下知识点就可以了,关于第7项,之后我会再继续尝试一下实现的;

参考资料:

https://blog.csdn.net/baidu_38661691/article/details/107481148
https://blog.csdn.net/u013168615/article/details/128560120

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 设备 设置adb自动监听tcp 5555端口,重启有效 的相关文章

  • 从队列更新活动的最佳方法

    我有一个LinkedBlockingQueue在我的 生产者 调解者 消费者 模型中的调解者中 Producer 首先更新将 Mediator 添加到 ActivityQueue 中 接下来 消费者 活动在队列中等待 侦听并获取下一个项目
  • 有关 paddingStart 使用的冲突 lint 消息

    API 17 RTL 支持发布后 我将以下内容添加到我的清单中 android supportsRtl true 这导致 Lint 在我的视图中有 paddingLeft Right 的地方正确地向我发出这些警告 考虑添加 android
  • RecyclerView 未显示列表中的所有项目

    我在用RecyclerView在我的应用程序中 每次我打开屏幕时 我只能看到一项 但当我调试时 它每次都会出现onBindViewHolder method 这是我的适配器 Override public ViewHolder onCrea
  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • IntentService、Service 或 AsyncTask

    实现这一点的最佳方法是什么 我有一个 Android 应用程序 它将使用我的 python 服务器来允许两部手机之间进行轮流通信 回合意味着他们在一轮开始之前不能互相交谈 一旦他们发送一条消息 他们就不能发送另一条消息 直到对方做出回应 然
  • 删除 json 对象字符串中的“\”

    如何删除下面字符串中的特殊字符 String x message content toom recipients id 1000001865 room subject room 我使用了 x replaceAll 但它不起作用 您必须转义正
  • Android Accessibility 执行触摸操作

    我想知道是否可以使用 Android 辅助功能服务在屏幕上的位置执行触摸操作 例如 Bundle arguments new Bundle arguments putInt coord X X value arguments putInt
  • 如何更改对话框的默认黑色暗淡背景“颜色”(而不是暗淡量)?

    这是随机显示的图像Dialog在网上找到的 我一直在实施一个自定义Dialog 我可以处理对话框上的几乎所有内容 除了对话框本身下方的默认黑色昏暗背景之外 但在其后面的整个屏幕上 基本上我想改变它color和阿尔法值 我一直在 StackO
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • 有没有办法替代Android中的标准Log?

    有没有办法以某种方式拦截对 android 中标准 Log 的调用并执行其他操作 在桌面 Java 中 人们通常会得到一些记录器 因此有多种方法可以安装不同的日志处理程序 实现 但是 Android似乎对Log有静态调用 我找不到任何有关替
  • 从 Handler.obtainMessage() 获取什么参数

    我正在使用线程来执行一些 BT 任务 我正在尝试向 UI 线程发送消息 以便我可以基于我的 BT 线程执行 UI 工作 为此 我使用处理程序 但我不知道如何检索发送到处理程序的数据 要发送数据 我使用 handler obtainMessa
  • Android 26 (O) 通知不显示操作图标 [重复]

    这个问题在这里已经有答案了 随着 Android 26 O 引入通知渠道 我一直在调查 Google 提供的com example android notificationchannels 这个示例按预期工作 直到我尝试添加Action到示
  • 以编程方式应用样式资源

    我没有找到一种以编程方式做到这一点的方法 所以我在这里发布这个问题 我也没有找到与此相关的任何问题 我有一个资源样式 在 res values styles xml 中定义 我想做的是使用 java 将这种样式应用到我正在操作的 View
  • 如何从webkit浏览器中检测Android版本和品牌?

    如何通过webkit浏览器检测Android版本和品牌 可靠吗 我相信你可以检查用户代理 但是 我认为它不安全 因为有很多方法可以用来欺骗用户代理 在谷歌上搜索这个问题给了我们很多答案 它甚至可以在默认浏览器上运行 您只需输入 about
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • 从多个 TextView 中选择文本

    如何在android中从多个文本视图中选择文本 我已经尝试过以下代码 该代码一次仅适用于一个文本视图 我想一次性从许多文本视图中复制文本 android textIsSelectable true 你不能同时这样做 您需要在单个文本视图中设
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 时它不起作用

    当我使用 ListView 时 ListTile OnTap 正在工作 但是当我使用 ListWheelScrollView 时它不起作用 我的意思是它不会被窃听 观点发生变化 但我似乎无法点击它 我在很多地方和链接中寻找解决方案 但仍然找
  • Android中绑定适配器有什么用?

    我一直在阅读有关Android中绑定适配器的文章 但我似乎不明白它 何时使用绑定适配器 有人可以用一个简单的例子来解释它吗 我读过的一篇文章在主活动中有一个绑定适配器 绑定适配器有一个参数 toastMessage 显然 只要 toastM
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr

随机推荐

  • 解决Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/问题

    昨天在使用docker 时 将 image 文件从仓库抓取到本地一直报错 经过尝试 终于得以解决 错误信息如下 root archlinux docker image pull library hello world Using defau
  • ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)

    ROS机器人仿真 安装 配置 测试 建图 定位 路径规划 1 ROS安装与配置 1 1 安装虚拟机软件 1 2 虚拟一台主机 1 3 安装ubuntu 1 4 在ubuntu中安装ROS机器人操作系统 1 4 1 配置ubuntu的软件和更
  • Exams/m2014 q4k

    Implement the following circuit module top module input clk input resetn synchronous reset input in output out reg 2 0 t
  • 香港经典古装电视剧

    楚留香 射雕英雄传 倚天屠龙记 金枝欲孽 大唐双龙传 寻秦记 萧十一郎 小李飞刀 云海玉弓缘 西游记 封神榜 洗冤录 锦绣前程 杨门女将 杨家将 笑傲江湖 苏乞儿 绝代双骄 鹿鼎记 成吉思汗 神雕侠侣 陆小凤 书剑恩仇录 啼笑姻缘 http
  • Java I/O (第二版) I/O基础 I/O概述

    第一部分 第一章 介绍I O 输入和输出 的简写I O 它是任何操作系统和程序设计语言所必须的基础功能 只有空想家才会喜欢没有输入输出的程序 同时 IO的话题似乎对程序员没有什么吸引力 其实不然 我们应该有很多有趣的东西需要学习在IO中 J
  • react从入门到精通总结(一)

    React简介 React 是一个用于构建用户界面的 JS 库 主要用于构建UI React由美国的公司Facebook在2011年诞生并于2013年开源发布 特点 1 声明式设计 React采用声明范式 可以轻松描述应用 2 高效使用虚拟
  • Django 连接redis

    安装 pip install django redis redis安装 docker pull redis latest docker run d name redis p 6379 6379 redis requirepass passw
  • STL容器

    这里写目录标题 三大组件介绍 1 容器 2 算法 3 迭代器 STL容器 string容器 vector容器 deque容器 stack容器 queue容器 list容器 set multiset容器 map multimap容器 常见面试
  • 【LeetCode第1场双周赛】

    第 1 场双周赛 A 模拟 class Solution public int fixedPoint vector
  • 计算机网络设备子系统,网络综合布线七大子系统详细讲解

    打开APP 查看更多精彩图片 在实施时主要注意以下几点 1 确定介质布线方法和线缆走向 2 双绞线的长度一般不超过90m 3 尽量避免水平线路长距离与供电线路平行走线 应保持一定的距离 非屏蔽缆线一般为30cm 屏蔽缆线一般为7cm 4 线
  • 基于STM32的LVGL的实时日历设置界面

    基于STM32的LVGL的实时日历设置界面 提示 STM32 RTC littlevgl GUI 设置时间代码 if obj Set time btn 点击对象为设置按钮 if event LV EVENT RELEASED uint8 t
  • 轻量级Transformer模型ConvBERT架构及完整源码实现

    第28章 使用Local dependency轻量级Transformer模型ConvBERT架构内幕及完整源码实现 1 BERT依赖global self attention而带来的问题分析 2 BERT不同Layer的computati
  • 向电脑(windows11 OS环境)的所有外挂移动硬盘写入数据提示目标文件夹访问被拒绝的解决方法

    向电脑 windows11 OS环境 的所有外挂移动硬盘写入数据 就是在粘贴文件 出现以下提示框 解决办法流程如下 运行窗口 输入 gpedit msc 命令 按 确定或回车 快速打开本地组策略编辑器 本地组策略编辑器窗口 依次展开 计算机
  • esp32-S3专题二:内存2之RTC内存、FLASH使用

    承接上文 讲一下esp32上剩下的几个存储空间的用途 目录 一 RTC存储器 一 RTC 快速存储器 二 RTC 慢速存储器 二 Flash 一 NVS 表 二 程序和OTA分区 三 SPIFFS 文件系统 三 总结 一 RTC存储器 es
  • 不安全的加密算法

    不安全的加密算法 SKIPJACK RC4 RSA 1024位以下 des md2 md4 md5 属于经过验证 安全的 公开的加密算法 RSA DSA ECDSA 加入盐值的SHA256 推荐使用的数字签名算法有 DSA ECDSA
  • 值得重点推荐的BI软件有哪些?全在这里了

    在数字化程度越来越高的趋势下 发挥着推动企业数字化转型重要作用的商业智能BI也在不断提升市场份额 也催生出不少的BI软件新星 那么 BI软件有哪些 哪些BI软件更普遍适用于不同行业 针对这些问题 我们做了以下总结 BI软件有哪些 国内比较老
  • goland missing dependency错误

    新建一个项目 里面引用到第三方的包 项目编译没有问题 可是在goland里按住ctrl 鼠标点击打算跳转到第三方包相应的实现时却跳转不了 import的第三方也标红 同时go mod文件该第三方包也是标红的 看这篇文章 出现的问题和我的比较
  • moviepy音视频开发:音频拼接函数concatenate_audioclips介绍

    前往老猿Python博文目录 concatenate audioclips函数用于将多个音频剪辑进行拼接合成一个顺序播放的剪辑 调用语法 concatenate audioclips clips 说明 clips参数用于存放需要顺序拼接的音
  • 【备忘】Linux上传文件,下载文件

    背景小故事 这次在迁移服务器的时候要把ssl文件传到Linux里面 但是我又不想用ide来传 之前看同事演示过 当时没记住 感觉他简单操作就可以了 这次打算学会它 这功能用得不多 平常都不怎么使用 我们也可以用客户端连接服务器进行上传 方法
  • Android 设备 设置adb自动监听tcp 5555端口,重启有效

    Android 设备调试有两种连线方式 有线和无线 有线是通过USB导线连接android设备和电脑端 无线方式是通过连接WIFI 通过TCP的方式 连接设备和电脑端 一般用 5555端口 有线的调节 只需要打开调试模式基本就可以了 无线连