From 22f75f701cb42bb57150b386b4872a93c928e1b7 Mon Sep 17 00:00:00 2001 From: gaozl Date: Thu, 26 Mar 2026 14:18:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20root=20=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../qianmu/container/mqtt/MQTTService.java | 20 +++++++++++- .../qianmu/container/util/RootCmdUtil.java | 31 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9f10b45..b56a952 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { applicationId "qianmu.container" - minSdkVersion 24 + minSdkVersion 26 targetSdkVersion 30 versionCode 6 versionName "V2.0.8.20" diff --git a/app/src/main/java/qianmu/container/mqtt/MQTTService.java b/app/src/main/java/qianmu/container/mqtt/MQTTService.java index a62215b..24571d1 100644 --- a/app/src/main/java/qianmu/container/mqtt/MQTTService.java +++ b/app/src/main/java/qianmu/container/mqtt/MQTTService.java @@ -108,6 +108,7 @@ import qianmu.container.util.BitmapUtil; import qianmu.container.util.DeviceUtil; import qianmu.container.util.FileUtil; import qianmu.container.util.LoggerUtil; +import qianmu.container.util.RootCmdUtil; import qianmu.container.util.SignWayUtil; import qianmu.container.util.StringUtil; import retrofit2.Call; @@ -672,6 +673,7 @@ public class MQTTService extends Service { File file = new File(path); File parent = file.getParentFile(); if (!parent.exists()) parent.mkdirs(); + if (file.exists()) file.delete(); ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); try { @@ -690,6 +692,22 @@ public class MQTTService extends Service { } return false; }); + }else if(RootCmdUtil.checkSuCommand()){ //root + LoggerUtil.e("screenShot","root截屏"); + screenshotFuture = singleThreadExecutor.submit(() -> { + String[] cmd = new String[]{"su", "-c", "screencap -p " + path}; + Process process = Runtime.getRuntime().exec(cmd); + boolean finished = process.waitFor(3, TimeUnit.SECONDS); + if (!finished) { + process.destroyForcibly(); + return false; + } + if(new File(path).exists()){ + LoggerUtil.e("screenShot","截屏完成"); + return true; + } + return false; + }); }else{ screenshotFuture = singleThreadExecutor.submit(() -> { Bitmap screenBitmap = null; @@ -725,7 +743,7 @@ public class MQTTService extends Service { }); } - if (!screenshotFuture.get(12, TimeUnit.SECONDS)) { // 添加超时时间 + if (!screenshotFuture.get(10, TimeUnit.SECONDS)) { // 添加超时时间 LoggerUtil.e("screenShot","截屏失败"); return; } diff --git a/app/src/main/java/qianmu/container/util/RootCmdUtil.java b/app/src/main/java/qianmu/container/util/RootCmdUtil.java index 7f747ee..c46f86a 100644 --- a/app/src/main/java/qianmu/container/util/RootCmdUtil.java +++ b/app/src/main/java/qianmu/container/util/RootCmdUtil.java @@ -1,5 +1,6 @@ package qianmu.container.util; +import android.text.TextUtils; import android.util.Log; import com.sdkapi.api.SdkApi; @@ -7,10 +8,13 @@ import com.sdkapi.common.ApiTool; import com.sdkapi.common.ResultCallback; import com.sdkapi.common.ResultInfo; +import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; +import java.io.InputStreamReader; + import qianmu.container.handler.HdmiStatusCallback; @@ -83,5 +87,32 @@ public final class RootCmdUtil { } return result; } + + /** + * 判断 root + * @return + */ + public static boolean checkSuCommand() { + Process process = null; + BufferedReader reader = null; + try { + process = Runtime.getRuntime().exec(new String[]{"su", "-c", "id"}); + reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String output = reader.readLine(); + + // 输出包含 uid=0 表示ROOT成功 + return !TextUtils.isEmpty(output) && output.contains("uid=0"); + + } catch (Exception e) { + return false; + } finally { + try { + if (reader != null) reader.close(); + if (process != null) process.destroy(); + } catch (Exception ignored) {} + } + } } + +