安卓设备重启后持久化无线调试的方法及SELinux是否阻止无线ADB连接的问询
安卓设备重启后持久化无线调试的方法及SELinux是否阻止无线ADB连接的问询
我来帮你一步步分析和解决这个问题,先从你遇到的核心疑问和脚本细节入手:
一、先回应你的核心疑问:SELinux会阻止无线ADB连接吗?
SELinux(安全增强型Linux)在Enforcing模式下确实可能限制某些系统操作,但从你的日志来看,setprop命令已经执行成功且属性值也正确读取,说明SELinux并没有阻止你设置ADB端口属性。不过它可能在后续的ADB服务重启环节有限制,但这不是你当前连接失败的主要原因——你的脚本遗漏了一个关键步骤:重启ADB服务让新的端口配置生效。
二、你的脚本存在的核心问题
你只设置了service.adb.tcp.port属性,但ADB守护进程(adbd)不会自动监听新配置的端口,必须重启后才能加载新的属性。这就是为什么日志显示setprop成功,但你还是连不上的原因。
修改后的完整脚本
把原来的脚本更新为以下内容,添加重启adbd的步骤:
#!/system/bin/sh # Define the log file path LOG_FILE="/sdcard/Download/final_adb_log.txt" ( # Start a fresh log echo "--- Test Log Start: $(date) ---" > $LOG_FILE # 等待系统服务完全就绪(也可以用wait-for-service替代固定sleep,更可靠) sleep 90 echo "Waited 90 seconds. Attempting to run setprop..." >> $LOG_FILE # 设置ADB TCP端口 setprop service.adb.tcp.port 5555 >> $LOG_FILE 2>&1 echo "setprop command finished. Exit code: $?" >> $LOG_FILE # 检查属性是否设置成功 echo "Reading property value back:" >> $LOG_FILE getprop service.adb.tcp.port >> $LOG_FILE 2>&1 # 关键步骤:重启ADB守护进程,加载新配置 echo "Restarting adbd service..." >> $LOG_FILE stop adbd >> $LOG_FILE 2>&1 start adbd >> $LOG_FILE 2>&1 echo "adbd restart finished. Exit code: $?" >> $LOG_FILE # 验证ADB是否在监听5555端口 echo "Checking if adbd is listening on port 5555:" >> $LOG_FILE netstat -tulpn | grep adbd >> $LOG_FILE 2>&1 echo "--- Log End: $(date) ---" >> $LOG_FILE ) &
三、连接失败(10061)的其他排查点
除了脚本问题,还要检查这些地方:
- Tailscale网络权限:你用Tailscale连接设备,要确保Tailscale的ACL(访问控制列表)允许你的客户端设备访问目标手机的5555端口。默认ACL可能会限制跨设备的端口访问,需要在Tailscale控制台调整规则。
- 设备防火墙:安卓设备本身的防火墙(如果有第三方防火墙或系统自带的)是否允许5555端口的入站连接。
- 端口占用:确保5555端口没有被其他进程占用,可以用
lsof -i :5555在手机上检查。
四、SELinux的额外验证(如果以上都无效)
如果修改脚本后还是有问题,可以临时把SELinux设为Permissive模式测试:
在脚本中添加一行:
setenforce 0 >> $LOG_FILE 2>&1
注意:这只是测试用,长期保持Permissive会降低设备安全性,确认问题后再改回Enforcing,并通过SELinux规则(如添加自定义策略)来允许相关操作。
内容来源于stack exchange




