一向使用真机调试,数据线用久了有些接触不良,动作幅度一大,adb就断开链接。再买一根数据线是下下策,干脆买了个360随身Wifi,将手机通过Wifi连上电脑进行调试。没有数据线的牵绊轻松了许多。
电脑与手机用其他方式连在同一个局域网中也可以使用下面的方法。
手动方法
1.在手机上安装终端类App,开启Root权限,打开App,输入以下命令:
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
其中,su表示获取root权限
2.查看手机的Wifi连接,获取手机IP地址。
3.电脑上打开CMD,输入如下命令:
adb connect 手机IP地址
命令行输入adb devices或者Eclipse的DDMS都可以看到已连接的设备,可以直接进行真机调试
APP
每次连电脑都要在手机上输一大串终端命令实在太繁琐,干脆写了个APP代劳。必须给该APP开启Root权限。连上Wifi后打开APP点击按钮:
Github:loveNight/AndroidTerminal
Eclipse + ADT插件写的。导入工程后直接用USB调试装到自己手机上使用。
核心代码
手机上运行终端命令的代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* CMD 命令行执行工具
*/
public class CmdUtils {
public static final String COMMAND_SU = "su"; // 表示获取root权限(APP必须已root)
public static final String COMMAND_LINE_END = "\n";
public static final String COMMAND_EXIT = "exit\n";
/**
* Android手机用Wifi连上电脑ADB调试
* 须在手机终端输入如下命令
* 此终端必须已经Root
*/
public static final String[] wifiConnectToComputer = {
"setprop service.adb.tcp.port 5555",
"stop adbd",
"start adbd"
};
public static Result execute(String[] commands) {
//----------------- 待写:检查此手机是否已经Root-------------
Runtime runtime = Runtime.getRuntime();
Process process = null;
DataOutputStream output = null; // 用于向终端进程输入命令
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = null;
StringBuilder errorMsg = null;
try {
process = runtime.exec(COMMAND_SU);
output = new DataOutputStream(process.getOutputStream());
for (String command : commands) {
if (command == null) {
continue;
}
output.write(command.getBytes());
output.writeBytes(COMMAND_LINE_END); // 输完一行命令要按回车
output.flush();
}
output.writeBytes(COMMAND_EXIT);
output.flush();
process.waitFor(); // 当前线程等待,直到process线程执行结束
successMsg = new StringBuilder();
errorMsg = new StringBuilder();
successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while ( (s = successResult.readLine()) != null) {
successMsg.append(s).append("\n");
}
while ( (s = errorResult.readLine()) != null) {
errorMsg.append(s).append("\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { // 回收资源
try {
if (output != null) {
output.close();
}
if (successResult != null) {
successResult.close();
}
if (errorResult != null) {
errorResult.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
return new Result(successMsg == null ? null : successMsg.toString()
, errorMsg == null ? null : errorMsg.toString());
}
public static class Result {
public String successMsg;
public String errorMsg;
public Result(String successMsg, String errorMsg) {
super();
this.successMsg = successMsg;
this.errorMsg = errorMsg;
}
}
}
获取手机IP地址需要Wifi权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
代码如下:
1 | import java.net.InetAddress; |