Android开发确定要链接pc的adb进行调试,传统的方法是用usb与pc进行链接,操做简单即插即用,缺点是pc上必须得有对应手机的usb驱动程序,对于谷歌亲儿子系列和三星摩托等外国品牌而言这不是什么问题,一般sdk里面就自带了,然而想华为小米这种自带魔改rom的国产货就很难说了,一般须要安装厂家本身出的usb驱动程序才能链接adb,然而一想到雷猴王的wps全家桶多么丧病我就不想在电脑上装任何他家的东西。css
固然后来有了更加先进的链接adb的方式——wifi链接。只须要敲入几行命令开启手机端的adb服务,pc端便可根据手机的ip地址进行adb链接,不用依赖驱动程序,全部品牌的手机都适用,惟一的前提条件是————java
ROOTlinux
我去,对Android开发者而言这也算个事?android
下面就来介绍怎么使用这种链接方法。web
首先在手机上安装一个模拟shell的app,随即是什么,能像linux的shell同样执行命令行就能够。shell
秘笈很简单:网络
su setprop service.adb.tcp.port 5555 stop adbd start adbd
第一行,和linux同样获取root权限,我刚才说过你的手机应该已经root了,不然这里会报错。app
第二行设置adb服务端口为5555,这是adb的默认端口。tcp
第三行第四行,重启adb服务。ide
若是执行到这里都没有问题,那么用你以为方便的方法获取手机在无线网络中的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窗口中应该就能看到你的手机了。
在制做粗糙的模拟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) { } } }
阿里的价值观究竟是什么摸不太透,不过想来我这个玩意极大的提高操做效率岂不是对那些手敲命令行的人不公平,隐约以为提及价值观貌似也是分分钟药丸。幸亏不在阿里工做,不然早就被叉出去了哈哈。
也能够在手机上安装豌豆荚app设置无线链接。
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