diff --git a/app/build.gradle b/app/build.gradle index 5880ef2..4b3e8bd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,7 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' + implementation "com.github.topjohnwu.libsu:core:3.1.2" // 基础依赖包 implementation 'com.gyf.immersionbar:immersionbar:3.0.0' // Fragment 快速实现 diff --git a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt index b971f1b..5892ee2 100644 --- a/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt +++ b/app/src/main/java/com/fankes/miui/notify/ui/MainActivity.kt @@ -208,9 +208,9 @@ class MainActivity : BaseActivity() { /** 重启系统界面 */ private fun restartSystemUI() = - execShellCmd(cmd = "pgrep systemui").also { pid -> + execShellSu(cmd = "pgrep systemui").also { pid -> if (pid.isNotBlank()) - execShellCmd(cmd = "kill -9 $pid") + execShellSu(cmd = "kill -9 $pid") else Toast.makeText(this, "ROOT 权限获取失败", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt b/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt index c41f8cc..7ccec93 100644 --- a/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt +++ b/app/src/main/java/com/fankes/miui/notify/utils/Utils.kt @@ -33,8 +33,7 @@ import android.provider.Settings import android.service.notification.StatusBarNotification import android.util.Base64 import com.fankes.miui.notify.application.MNNApplication.Companion.appContext -import java.io.DataInputStream -import java.io.DataOutputStream +import com.topjohnwu.superuser.Shell /** * 系统深色模式是否开启 @@ -268,28 +267,10 @@ fun findPropString(key: String, default: String = "") = * @param cmd 命令 * @return [String] 执行结果 */ -fun execShellCmd(cmd: String): String { - var result = "" - var dos: DataOutputStream? = null - var dis: DataInputStream? = null - try { - val p = Runtime.getRuntime().exec("su") - dos = DataOutputStream(p.outputStream) - dis = DataInputStream(p.inputStream) - dos.writeBytes("$cmd\n") - dos.flush() - dos.writeBytes("exit\n") - dos.flush() - var line: String - while (dis.readLine().also { line = it } != null) result += line - p.waitFor() - } catch (_: Exception) { - } finally { - try { - dos?.close() - dis?.close() - } catch (_: Exception) { - } +fun execShellSu(cmd: String) = try { + Shell.su(cmd).exec().out.let { + if (it.isNotEmpty()) it[0].trim() else "" } - return result.trim() +} catch (_: Throwable) { + "" } \ No newline at end of file