Android手机用wifi连接adb调试的方法
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() {
@Override
public 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
Android手机用wifi连接adb调试的方法的更多相关文章
- Android配置----小米手机通过wifi连接ADB调试Android应用
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- 使用Wifi连接ADB调试App
前提:你的手机ROOT过,做Android开发的,别跟人说你的手机不是ROOT的. 步骤: 1.在手机上把ADB服务进程的TCP端口设置为5555,这是Android ADB的默认调试商品.这需要 ...
- Andorid使用WiFi 连接adb进行调试
无奈数据线连接常常掉线. 于是寻找wifi连接adb的方法,在github上搜索了一下client的源代码后编译后执行了下,发现能够行得通,于是记录一下. 相应的安卓client源代码在这wifi a ...
- Android 查看 无wifi/usb设备的logcat方法
Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉.我须要调试一个USB设备这样也无法用usb来输出logcat. 由于这个USB设备 ...
- 解决IE下载 apk/ipa 变成zip:Android 手机应用程序文件下载服务器 配置解决方法
解决IE apk/ipa变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Da ...
- Android使用蓝牙连接adb调试App
使用WiFi连接Android设备调试APP的教程非常多,可是项目中须要使用蓝牙进行通信.所以牵扯使用蓝牙调用adb. 1. 将电脑蓝牙与手机进行配对(控制面板->设备和打印机->加入 ...
- Android开发拾遗(一)用Wi-Fi连接adb
可以用Wi-Fi通过标准的TCP/IP连接来连接Android设备. 这在开发监听USB相关事件的应用程序时会特别有用,原因是USB连接会起到干扰作用,比如USB的连接/断开事件. 首先要像通常一样用 ...
- WIFI无线adb调试android
有个需求需要支持android插上键盘,鼠标等外设,但是这样就不能使用microusb口进行adb调试了. 研究了一番,发现可以利用wifi进行adb无线调试(adb应该本身已经支持无线调试). WI ...
- Android手机使用WIFI及USB建立FTP服务器总结
想必大家经常在PC和Android之间传输文件,并不是每次都会插USB接口进行文件传输,就算是插上USB接口,还是有个问题,那就是Android打开大容量存储模式之后,经常很多软件就会被强制停止使用, ...
随机推荐
- C#中#region和#endregion的用法
一.用法说明 #region 说明 Program1 #endregion 二.作用 (1)注释其中间的代码段 (2)折叠中间的代码块(折叠后的说明文字为#region后面的说明)
- error LNK2001: unresolved external symbol _main
想运行一个网上下载的opengl离屏渲染(渲染到纹理FBO)的程序,然后一直报错 error LNK2001: unresolved external symbol _main 解决了一下午终于弄明白 ...
- BZOJ3070 : [Pa2011]Prime prime power 质数的质数次方
对于$a^b$,如果$b=2$,那么在$[\sqrt{n},\sqrt{n}+k\log k]$内必定能找到$k$个质数作为$a$. 筛出$n^{\frac{1}{4}}$内的所有质数,暴力枚举所有落 ...
- JS 引用类型之Object
引用类型定义: 描述一类对象具有的属性和方法 引用类型Object ,也就是我们常说的对象类型了,这应该是JavaScript中最常见的引用类型了. 对象是某个引用类型的实例,如何创建一个实例,也就是 ...
- PLC STL any数据类型
1.any数据类型共10个字节,数据格式如下 2.Byte 0: 固定10h 表示S7 Byte 1:表示数据类型 Coding of the Data Types Hexadecimal Code ...
- JAVA自学作业02
JAVA自学作业02 1.什么是标识符?由哪些部分组成?常见的命名规则有哪些? 标识符是用户为变量的内存空间所定义的字符序列: 可以由字母.下划线.美元符号以及数字组成,但数字不可作为首字符.标识符不 ...
- Unity游戏开发图片纹理压缩方案
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...
- SpringBoot无废话入门02:SpringBoot启动分析
1.核心注解 在上文中,我们讲到了@SpringBootApplication是SpringBoot的核心注解. 可以很方便的在idea中下载源码来查看该注解的源码,如下: 可以看到,该注解本身又被其 ...
- JS实现网站内容的禁止复制和粘贴、另存为
1.使右键和复制失效方法1:在网页中加入以下代码: <script language="Javascript"> document.oncontextmenu=new ...
- mysql-linux定时备份mysql数据库
sh脚本 #!/bin/bash db_user="数据库用户名" db_passwd="数据库密码" db_name="数据库名" cd ...