http接口请求操作adb命令
2018-03-16 本文已影响280人
早起有虫吃
最近在做web端测试的时候突发奇想,想到了用接口的形式操作adb。
原理如下:本地写个servlet,servlet写一个get请求的接口,当有用户访问时返回当前电脑连接的设备
效果如下
image.png
代码如下:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.TestResultDaoImpl;
import com.entity.TestResult;
import com.google.gson.Gson;
import com.util.CmdUtils;
/**
* Servlet implementation class TestAdd
*/
public class GetDevicesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetDevicesServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
CmdUtils cmdUtils=new CmdUtils();
List devices=cmdUtils.excuteCmd1("adb devices");
//将list转化成json
Gson gson = new Gson();
String json = gson.toJson(devices);
// 输出到界面
System.out.println(json);
response.setContentType("text/plain");
response.setCharacterEncoding("gb2312");
PrintWriter out = new PrintWriter(response.getOutputStream());
out.print(json);
out.flush();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
工具类:
package com.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CmdUtils {
List<String>resultList=new ArrayList<String>();
public List<String> excuteCmd(String command){
//String command="adb devices";
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
resultList.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return resultList;
}
public List<String> excuteCmd1(String command){
//String command="adb devices";
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
if(line.contains("device")){
if(!line.contains("devices")){
String deviceId=line.substring(0, line.indexOf("device")-1);
resultList.add(deviceId);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return resultList;
}
}