https://www.jianshu.com/p/dc6898380e38

0x0 前言

Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点是pc上必须得有对应手机的usb驱动程序,对于谷歌亲儿子系列和三星摩托等外国品牌而言这不是什么问题,通常sdk里面就自带了,然而想华为小米这种自带魔改rom的国产货就很难说了,通常需要安装厂家自己出的usb驱动程序才能连接adb,然而一想到雷猴王的wps全家桶多么丧病我就不想在电脑上装任何他家的东西。

当然后来有了更加先进的连接adb的方式——wifi连接。只需要敲入几行命令开启手机端的adb服务,pc端即可根据手机的ip地址进行adb连接,不用依赖驱动程序,所有品牌的手机都适用,唯一的前提条件是————

ROOT

我去,对Android开发者而言这也算个事?

下面就来介绍怎么使用这种连接方法。

0x1 手动输入秘笈

首先在手机上安装一个模拟shell的app,随便是什么,能像linux的shell一样执行命令行就可以。

秘笈很简单:

su
setprop service.adb.tcp.port 5555 stop adbd start adbd 

第一行,和linux一样获取root权限,我刚才说过你的手机应该已经root了,否则这里会报错。

第二行设置adb服务端口为5555,这是adb的默认端口。

第三行第四行,重启adb服务。

如果执行到这里都没有问题,那么用你觉得方便的方法获取手机在无线网络中的ip地址,比如最常见的192.168.0.100

到你的pc机上,打开cmd.exe或其他什么类似的东西,找到adb的存放的路径,执行以下代码

adb connect 192.168.0.100 

如果你随后看到

connected to 192.168.0.100 

类似的字样,说明已经连接成功了,你在Android Studio的Android Monitor窗口中应该就能看到你的手机了。

0x2 让app自动输入秘笈

在制作粗糙的模拟shell app里用手机触摸屏上的软键盘输入了3次这种秘笈以后,我终于不能忍了。为什么不能一键让程序自动替我们输入这些命令呢?

于是现在我假设在某个布局文件中我们已经有了一个Button,名字叫btn_su,在某个Activity中我们加载了这个布局文件,并且绑定给一个Button对象btnSu

下面设置这个btnSu的点击事件监听器

btnSu.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) { // TODO } }); 

在事件监听器里面实现启动adb服务的功能。

首先开启一个具有root权限的进程:

Process localProcess = Runtime.getRuntime().exec("su");

打开该进程的输入流

DataOutputStream os = new DataOutputStream(localProcess.getOutputStream());

向该输入流中写入如下字符串

os.writeBytes("setprop service.adb.tcp.port 5555\n");
os.writeBytes("stop adbd\n");
os.writeBytes("start adbd\n");
os.flush();

以上代码相当于向一个具有root权限的shell中写入如下命令

setprop service.adb.tcp.port 5555 stop adbd start adbd 

下面为了更方便的连接电脑进行调试,顺便就获取一下手机的ip地址显示在屏幕上:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
//判断wifi是否开启WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);Toast.makeText(MainActivity.this, ip, Toast.LENGTH_LONG).show();

其中intToIp方法想必谁都会写,这里就不贴出来了。

完整的监听器onClick实现代码如下:

@Override
public void onClick(View v) { DataOutputStream os = null; try { Process localProcess = Runtime.getRuntime().exec("su"); os = new DataOutputStream(localProcess.getOutputStream()); os.writeBytes("setprop service.adb.tcp.port 5555\n"); os.writeBytes("stop adbd\n"); os.writeBytes("start adbd\n"); os.flush(); WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); //判断wifi是否开启 WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = intToIp(ipAddress); Toast.makeText(MainActivity.this, ip, Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } } catch (IOException e) { } } } 

0x3 吐槽

阿里的价值观到底是什么摸不太透,不过想来我这个玩意极大的提升操作效率岂不是对那些手敲命令行的人不公平,隐约觉得说起价值观貌似也是分分钟药丸。幸好不在阿里工作,否则早就被叉出去了哈哈。

0x4 other

也可以在手机上安装豌豆荚app设置无线连接。

0x5 other2

1,  确认本机PC 没有任何adb 设备连接,包括模拟器和usb连接, 即 使用

“adb devices” 命令后, 列表显示为空, 这个是为了后面敲命令容易一些

2,  将远程android设备接入wifi, 并查看其IP地址:设置—〉无线或网络---〉WLAN设置—〉按menu键并选择“高级”选项---〉IP 地址  例如192.168.2.11

3,  本机command 命令下执行 ping  192.168.2.11, 如果ping成功,说明可以连接

4,  执行 adb connect 192.168.2.11

如果显示连接成功,则可继续执行后面的操作;如果不成功,如显示:

unable to connect to 192.168.2.11:5555

有可能是设备监听端口的问题,则可以在手机终端执行如下命令:

su  //获取root权限

setprop service.adb.tcp.port 5555   //设置监听的端口,端口可以自定义,如5554,5555是默认的

stop adbd   //关闭adbd

start adbd   //重新启动adbd

手机终端的下载程序可以在这里下载:http://as.baidu.com/a/item?docid=437072506&f=web_alad_1

执行这个的前提是你手机可以root权限,如果没有root权限仍然不能执行su

获得root权限的方法很多,手机型号不同,获取方法也有差别,网上很多方法,这里不再细述(对调试开发者,获得root权限是非常必要的)

5,  adb connect ip 成功以后可以执行原来usb连接时的所有命令,如adb install, adb logcat等。

下面附上adb的常用命令:

1,  开启adb  服务

adb start-server

2,  关闭adb 服务

adb kill-server

3,  查看设备

adb devices

4,  安装软件

adb install xxx.apk

5,  卸载软件

adb uninstall xxx.apk

6,  进入设备或模拟器

adb shell  devicename

如果当前只有一个设备,devicename也可以为空

7,  从电脑上发送文件到设备

adb push  PCfilepath devicepath

8,  从设备上copy文件到电脑

adb pull devicepath  PCpath

9,  查看bug报告

adb bugreport

10, 获得设备序列ID

adb get-product

11, 查看log

adb logcat

转载于:https://www.cnblogs.com/shengs/p/10177801.html

Android手机用wifi连接adb调试的方法相关推荐

  1. adb 最大连接_工具集 | Android Studio—使用 WI-FI 进行 ADB 调试

    前言 Android 开发离不开 ADB 调试,使用 WI-FI 进行 ADB 调试可以避免手机需要保持 USB连接主机.这篇文章记录了使用 WI-FI 进行 ADB 调试遇到的问题,希望能帮上忙. ...

  2. Android无线调试 Wifi连接ADB不用数据线

    为什么用Wifi连接ADB不用数据线?因为我的数据线不见了. 前提:你的手机ROOT过,做Android开发的,别跟人说你的手机不是ROOT的. 步骤:    1.在手机上把ADB服务进程的TCP端口 ...

  3. 【Android】使用Wifi或网线连接ADB调试App

    为什么用Wifi连接ADB不用数据线?因为我的数据线不见了. 前提:你的手机ROOT过,做Android开发的,别跟人说你的手机不是ROOT的. 步骤:    1.在手机上把ADB服务进程的TCP端口 ...

  4. Android Studio 使用 WIFI 连接手机

    Android Studio 使用 WIFI 连接手机 手机连线经常接触不良, 连上又断又连上又断的时候, 只要确保有一点时间让你连上 adb wifi, 就不用再听到那烦人的声音. 注意手机跟电脑必 ...

  5. android设备wifi无线adb调试

    android设备wifi无线adb调试 1, 在Window 10上,Win徽标->打开Windows设置->网络和Internet->移动热点->打开移动热点 2, and ...

  6. android 8 wifi 不稳定,安卓手机无线网连接不稳定怎么办 wifi连接不稳定的解决方法...

    工具/原料 安卓4.3 方法/步骤 这个功能应该是安卓4.3的特有功能,会检测wifi的连接质量在相同手机4.1.2的版本是没有的. 但这个版本的wifi检测似乎有点问题,即便是离wifi源很近,也会 ...

  7. 笔记9 | 使用wifi连接adb打印数据

    地址 CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/78067139 由于机器的调试与dvr设备公用端口,李冰冰跟范冰冰不可兼 ...

  8. Android手机同时使用Wi-Fi和数据流量

    Android手机同时使用Wi-Fi和数据流量 大家都知道,当手机成功连接到Wi-Fi热点以后,手机所产生的上网流量都是通过Wi-Fi来传输的,而手机的移动流量会被禁用.但是,我们现在有特殊的业务需求 ...

  9. android 手机同时使用wifi 和数据流量(3G/4G...)

    Android手机同时使用Wi-Fi和数据流量 大家都知道,当手机成功连接到Wi-Fi热点以后,手机所产生的上网流量都是通过Wi-Fi来传输的,而手机的移动流量会被禁用.但是,我们现在有特殊的业务需求 ...

最新文章

  1. MATLAB中plot函数的linespec参数
  2. aliyun服务器安装git,g++
  3. 经典C语言程序100例之二八
  4. ava method org.apache.struts2.components.Form.getValidators(String) threw an exception when invoke
  5. ELASTIC API
  6. Andriod开发 --插件安装、环境配置、问题集锦
  7. 阿里云喻义:十年牧码,从码农走向工程师的进化之路
  8. PyTorch学习笔记:PyTorch初体验
  9. PHP正则表达式的运用
  10. C语言题目——三子棋游戏
  11. c语言sinx的幂级数展开式,sinx的幂级数展开式问题?
  12. html5在线拍照,h5调用html5拍照上传功能
  13. 前端50个精美登录注册模板(觉得好用帮我点个赞呗)
  14. 机器学习理论知识的自学整理(持续更新,建议收藏)
  15. matlab2016 dll,VS2012Matlab2016b dll文件混合编
  16. css3炫酷环形背景动画
  17. 数学随记 微积分学习之极限概念的体会
  18. win32 010 使用masm32
  19. 解决电脑无法运行 Mscomctl.ocx控件 常见的4个问题
  20. MCDF中arbiter的轮询机制

热门文章

  1. BugkuCTF-MISC题低位的色彩
  2. BugkuCTF-Crypto题给你私钥吧
  3. commvault备份mysql,备份MySQL数据库的4种方式
  4. 平行志愿遵循分数优先php,2020平行志愿的录取规则是什么有哪些优势
  5. 高斯核函数python代码_单类SVM:SVDD
  6. Android nfc编译,【Android编译】各个模块编译方法
  7. java黄金连分数_蓝桥杯 | Java B组省赛真题练习——黄金连分数-Go语言中文社区...
  8. linux家庭云服务器,linux服务器云(linux家用云服务器)
  9. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...
  10. spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗