最近在做web端测试的时候突发奇想,想到了用接口的形式操作adb。
原理如下:本地写个servlet,servlet写一个get请求的接口,当有用户访问时返回当前电脑连接的设备
效果如下
代码如下:
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; } }
文章来源: http接口请求操作adb命令