diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/thread/AndroidDeviceInitThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/thread/AndroidDeviceInitThread.java index 12207e7..f0d9952 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/thread/AndroidDeviceInitThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/thread/AndroidDeviceInitThread.java @@ -27,11 +27,11 @@ import java.util.*; */ public class AndroidDeviceInitThread extends Thread { - private Logger logger = LoggerFactory.getLogger(AndroidDeviceInitThread.class); + private final Logger logger = LoggerFactory.getLogger(AndroidDeviceInitThread.class); - private AdbDevice adbDevice; + private final AdbDevice adbDevice; - private Adb adb; + private final Adb adb; private AdbTransport transport; @@ -41,7 +41,7 @@ public class AndroidDeviceInitThread extends Thread { private boolean agentStatus = false; - private Object lock = new Object(); + private final Object lock = new Object(); private final String AGENT_START_SHELL = "export CLASSPATH=/data/local/tmp/agent.apk;app_process /system/bin net.northking.product.cctpplus.Agent"; @@ -81,7 +81,6 @@ public class AndroidDeviceInitThread extends Thread { if (agentStatus) { try { deviceInfo = getDeviceInfo(); - if (null != deviceInfo) { logger.info("设备【{}】agent启动成功,注册设备到服务端,并开始监听设备的屏幕和wifi。。。。。。。。。。。。", adbDevice.getSerial()); //注册设备 AndroidDeviceManager.getInstance().registerDeviceToDeviceManager(deviceInfo); @@ -91,7 +90,6 @@ public class AndroidDeviceInitThread extends Thread { AndroidDeviceManager.getInstance().publishDeviceAgentAlready(adbDevice.getSerial()); //开启监听设备的变化 startWatchDeviceChange(); - } } catch (IOException e) { logger.warn("读取手机信息失败,请观察手机是否接上上位机", e); } @@ -514,9 +512,11 @@ public class AndroidDeviceInitThread extends Thread { String line; int n = 0; while ((line = reader.readLine()) != null) { - writer.write(line); - writer.newLine(); - writer.flush(); + if (writer != null) { + writer.write(line); + writer.newLine(); + writer.flush(); + } if ("SERVICE_APK_INSTALLED".equals(line)) { logger.info("设备【{}】cctp程序安装成功。。。。。。", adbDevice.getSerial()); n++; @@ -576,6 +576,26 @@ public class AndroidDeviceInitThread extends Thread { logger.warn("设备【{}】的agent被G掉了。。。。。。。。", adbDevice.getSerial(), e); agentStatus = false; } finally { + //通常Agent退出都为意外情况 + if (writer!=null){ + adb.refreshState(adbDevice); + try (AdbTransport logcatTransport = adb.shell(adbDevice, "logcat -d")) { + if (logcatTransport!=null){ + writer.write("\nAgent退出,以下为转储logcat日志\n"); + BufferedReader logcatReader = new BufferedReader(new InputStreamReader(logcatTransport.getInputStream())); + String logcatLine; + while ((logcatLine = logcatReader.readLine()) != null) { + writer.write(logcatLine); + writer.newLine(); + } + writer.write("以上为转储logcat日志\n"); + writer.flush(); + } + + } catch (Exception ignored) { + + } + } if (null != reader) { try { reader.close(); diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/adb/Adb.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/adb/Adb.java index 68289db..0777a27 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/adb/Adb.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/adb/Adb.java @@ -142,6 +142,30 @@ public class Adb { } } + /** + * 刷新设备状态
+ * 设备可能会处于枚举状态外完全不可用的状态,根据方法返回值判断 + * + * @param adbDevice 需要刷新的设备 + * @return 此设备是否还可用 + */ + public boolean refreshState(AdbDevice adbDevice) { + try (AdbTransport transport = createTransport()){ + transport.send("host-serial:" + adbDevice.getSerial() + ":get-state"); + transport.verifyResponse(); + String state = transport.readString(); + adbDevice.updateStateByText(state); + return true; + } catch (IOException ioException) { + log.error("尝试刷新[" + adbDevice.getProduct() + "(" + adbDevice.getSerial() + ")]时发生传输接口错误", ioException); + return false; + } catch (TransportException transportException) { + log.error("尝试刷新[" + adbDevice.getProduct() + "(" + adbDevice.getSerial() + ")]时发生传输协议错误", transportException); + return false; + } + } + + /** * 在设备上运行shell或开启shell会话