目录
一、解决办法(普通):
二、解决办法的优化
三、解决办法的进一步优化
问题:windows 11 电脑,每次开机,打开Android Studio,都会显示Loading Devices,连接不上设备。
原因:adb的端口被其他进程占用了。
目的:希望Android Studio 能够连接上手机设备。
一、解决办法(普通):
1、打开CMD命令行
2、在命令行中执行如下命令
第一步:找到占用5037端口的进程
netstat -aon|findstr "5037"
第二步:杀掉占用端口的进程
taskkill /pid {进程ID} /f
比如:taskkill /pid 6272 /f
第三步:启动adb
adb start-server
二、解决办法的优化
对【 一、 解决办法(普通)】进行包装,写成.java文件,执行java文件就很快了,提高工作效率。
问题:每天都要执行【 一、 解决办法(普通)】的流程,很耗时
目的:希望能执行一个.java文件,java文件封装了上述命令流程。
java代码如下:
import java.io.*;
/***
netstat -aon|findstr "5037"
taskkill /pid 30312 /f
adb start-server
*/
public class CmdLoadingDevices {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "netstat -aon|findstr \"5037\"");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("PJ11 :"+line);
if(line.contains(":5037")){
String[]arr = line.split(" ");
int length = arr.length;
System.out.println("PJ22 :"+arr[length-1]);
String processIdOfOccupyPort = arr[length-1];
String cmdKill = "taskkill /pid "+processIdOfOccupyPort+" /f";
ProcessBuilder processBuilderKill = new ProcessBuilder("cmd.exe", "/c", cmdKill);
processBuilderKill.redirectErrorStream(true);
Process processKill = processBuilderKill.start();
processKill.waitFor();
String cmdStartServer = "adb start-server";
ProcessBuilder processBuilderStartServer = new ProcessBuilder("cmd.exe", "/c", cmdStartServer);
processBuilderStartServer.redirectErrorStream(true);
Process processStartServer = processBuilderStartServer.start();
int exitCode = processStartServer.waitFor();
if (exitCode != 0){
System.out.println("PJ22 :错误");
} else {
System.out.println("完成");
}
break;
}
}
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
使用:
1、将上述CmdLoadingDevices.java 文件编译成CmdLoadingDevices.class文件。
javac -encoding UTF-8 D:\PJ\Private\javaJar\CmdLoadingDevices.java
2、执行文件
java CmdLoadingDevices
3、执行完成,Android Studio连接上了设备,OK。
4、整体使用命令行
5、完成。
三、解决办法的进一步优化
对【 二、 解决办法的优化】的包装,打成jar包,执行jar包就更快了,提高工作效率。
使用说明:
1、执行java -jar CmdLoadingDevices.jar
2、若是命令行输出:错误,则需要重新执行底1步;
若是命令行输出:完成,则OK。
具体生成jar包的步骤如下:
1、编译java文件
javac -encoding UTF-8 D:\PJ\Private\javaJar\CmdLoadingDevices.java
2、执行
jar -cvf CmdLoadingDevices.jar CmdLoadingDevices.class
3、执行java -jar CmdLoadingDevices.jar ,报错:没有主清单属性
a、重命名,将CmdLoadingDevices.jar重命名为CmdLoadingDevices.zip
b、解压CmdLoadingDevices.zip为CmdLoadingDevices文件夹
c、打开CmdLoadingDevices文件夹,用记事本打开文件MANIFEST.MF
d、在文件MANIFEST.MF中添加
Main-Class: CmdLoadingDevices
整个文件内容如下:
Manifest-Version: 1.0
Created-By: 11.0.19 (Amazon.com Inc.)
Main-Class: CmdLoadingDevices
对文件MANIFEST.MF的修改点:
在第三行的位置写入 Main-Class: CmdLoadingDevices (注意冒号后面有一个空格,整个文件最后有一行空行),保存。
4、将CmdLoadingDevices文件夹重新打成zip压缩包(CmdLoadingDevices.zip)
5、重命名,将CmdLoadingDevices.zip重命名为CmdLoadingDevices.jar
6、执行java -jar CmdLoadingDevices.jar
7、若是命令行输出:错误,则需要重新执行底6步;
若是命令行输出:完成,则OK。
8、完成。
附件(页面顶部的资源下载):jar包Jar包链接