agent退出打印系统日志

master
yineng.huang 2024-08-26 11:44:38 +08:00
parent 2633f64fa9
commit 9d528d2229
2 changed files with 53 additions and 9 deletions

View File

@ -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();

View File

@ -142,6 +142,30 @@ public class Adb {
}
}
/**
* <br>
*
*
* @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;
}
}
/**
* shellshell<br>