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会话