summaryrefslogtreecommitdiff
path: root/app/src/main/java/com/example/mylauncher/RootHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/example/mylauncher/RootHelper.java')
-rw-r--r--app/src/main/java/com/example/mylauncher/RootHelper.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/app/src/main/java/com/example/mylauncher/RootHelper.java b/app/src/main/java/com/example/mylauncher/RootHelper.java
new file mode 100644
index 0000000..886e07f
--- /dev/null
+++ b/app/src/main/java/com/example/mylauncher/RootHelper.java
@@ -0,0 +1,128 @@
+package com.example.mylauncher;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class RootHelper {
+ public static boolean executeRootCommand(String command) {
+ Process process = null;
+ DataOutputStream os = null;
+ try {
+ process = Runtime.getRuntime().exec("su");
+ os = new DataOutputStream(process.getOutputStream());
+ os.writeBytes(command + "\n");
+ os.writeBytes("exit\n");
+ os.flush();
+ return process.waitFor() == 0;
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ return false;
+ } finally {
+ try {
+ if (os != null) {
+ os.close();
+ }
+ if (process != null) {
+ process.destroy();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public static boolean hasRoot() {
+ return executeRootCommand("echo test");
+ }
+
+ /**
+ * Execute a shell command as root with a return value
+ */
+ public static String executeRootCommandWithOutput(String command) {
+ Process process = null;
+ StringBuilder output = new StringBuilder();
+ try {
+ process = Runtime.getRuntime().exec("su");
+ DataOutputStream os = new DataOutputStream(process.getOutputStream());
+ os.writeBytes(command + "\n");
+ os.writeBytes("exit\n");
+ os.flush();
+
+ java.io.BufferedReader reader = new java.io.BufferedReader(
+ new java.io.InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ output.append(line).append('\n');
+ }
+
+ process.waitFor();
+ return output.toString().trim();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ }
+
+ /**
+ * Check if a specific package is installed
+ */
+ public static boolean isPackageInstalled(String packageName) {
+ String command = "pm list packages " + packageName;
+ String result = executeRootCommandWithOutput(command);
+ return result != null && result.contains(packageName);
+ }
+
+ /**
+ * Execute a specific app with root permissions
+ */
+ public static boolean launchApp(String packageName) {
+ String command = "monkey -p " + packageName + " -c android.intent.category.LAUNCHER 1";
+ return executeRootCommand(command);
+ }
+
+ /**
+ * Reboot device
+ */
+ public static void reboot() {
+ executeRootCommand("reboot");
+ }
+
+ /**
+ * Power off device
+ */
+ public static void powerOff() {
+ executeRootCommand("reboot -p");
+ }
+
+ /**
+ * Lock screen
+ */
+ public static void lockScreen() {
+ executeRootCommand("input keyevent 26");
+ }
+
+ /**
+ * Change system settings (requires root)
+ */
+ public static boolean changeSystemSetting(String setting, String value) {
+ return executeRootCommand("settings put system " + setting + " " + value);
+ }
+
+ /**
+ * Kill a specific app
+ */
+ public static boolean killApp(String packageName) {
+ return executeRootCommand("am force-stop " + packageName);
+ }
+
+ /**
+ * Clear app data
+ */
+ public static boolean clearAppData(String packageName) {
+ return executeRootCommand("pm clear " + packageName);
+ }
+}