From 08a3fefb4e20177a8c1d450dd271927c1ddd1f1e Mon Sep 17 00:00:00 2001
From: hjw <hjw@ma.nodka.com>
Date: Tue, 28 Apr 2026 08:15:56 +0000
Subject: [PATCH] 更新AndroidAPI1.5, 支持非su系统下非systemuid应用进行静默安装/卸载

---
 app/src/main/java/com/jwipc/nodka_reboot_under/utils/Utils.java |   80 ++++++++++++++++++++++++++++++++-------
 1 files changed, 65 insertions(+), 15 deletions(-)

diff --git a/app/src/main/java/com/jwipc/nodka_reboot_under/utils/Utils.java b/app/src/main/java/com/jwipc/nodka_reboot_under/utils/Utils.java
index 210c117..ae31493 100644
--- a/app/src/main/java/com/jwipc/nodka_reboot_under/utils/Utils.java
+++ b/app/src/main/java/com/jwipc/nodka_reboot_under/utils/Utils.java
@@ -1,6 +1,7 @@
 package com.jwipc.nodka_reboot_under.utils;
 
 import java.io.BufferedReader;
+import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -11,29 +12,18 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.List;
 
 import android.app.ActivityManager;
 import android.content.Context;
-import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
-import android.hardware.spirit.AlarmPowerItem;
 import android.hardware.spirit.AlarmPowerManager;
 import android.jwipc.spirit.SpiritAlarmManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.NetworkInfo.DetailedState;
 import android.os.Build;
 import android.os.PowerManager;
-import android.os.RemoteException;
 import android.text.format.DateFormat;
-import android.util.Log;
 
 import com.jwipc.nodka_reboot_under.MyApplication;
-import com.nodka.api.NodkaAPI;
-import com.nodka.api.NodkaNative;
-
 
 public class Utils {
 
@@ -257,7 +247,7 @@
 			new AlarmPowerManager().removeAllalarmPower();
 			setFileState("0", "/sys/class/minix-rtc/MCURTCDATA");
 		} else {
-			MyApplication.getApplication().getNodkaAPI().alarm_removeAllalarmPower();
+			MyApplication.getApplication().getAndroidAPI().alarm_removeAllalarmPower();
 			setFileState("0", "/sys/class/minix-rtc/minix_RTC_DATA");
 		}
 
@@ -273,7 +263,7 @@
 					new SpiritAlarmManager().setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
 					setFileState("1", "/sys/class/minix-rtc/MCURTCDATA");
 				} else {
-					MyApplication.getApplication().getNodkaAPI().alarm_setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
+					MyApplication.getApplication().getAndroidAPI().alarm_setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
 					setFileState("1", "/sys/class/minix-rtc/minix_RTC_DATA");
 				}
 
@@ -308,7 +298,7 @@
 
 					new AlarmPowerManager().updateAlarmPowerActive(0, active+"");
 				} else {
-					MyApplication.getApplication().getNodkaAPI().alarm_creatOneAlarmPower(calendar.get(Calendar.YEAR)+"",
+					MyApplication.getApplication().getAndroidAPI().alarm_creatOneAlarmPower(calendar.get(Calendar.YEAR)+"",
 							calendar.get(Calendar.MONTH)+1+"",
 							calendar.get(Calendar.DAY_OF_MONTH)+"",
 							hms_on[0]+"",
@@ -320,7 +310,7 @@
 							hms_on[0]>12? "0":"1",
 							hms_off[0]>12? "0":"1");
 
-					MyApplication.getApplication().getNodkaAPI().alarm_updateAlarmPowerActive(0, active+"");
+					MyApplication.getApplication().getAndroidAPI().alarm_updateAlarmPowerActive(0, active+"");
 				}
 			}
 		}
@@ -688,6 +678,66 @@
 		
 		return re;
 	}
+
+	public String getRootCmdSilent(String cmd) {
+		DataOutputStream dos = null;
+		DataInputStream dis = null;
+		Process process = null;
+		try {
+			process = Runtime.getRuntime().exec("su");
+			dos = new DataOutputStream(process.getOutputStream());
+			dis = new DataInputStream(process.getInputStream());
+			dos.write(cmd.getBytes());
+			dos.flush();
+			dos.close();
+			process.waitFor();
+			return getStrFromDataInPutStream(dis);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		} finally {
+			if (dos != null) {
+				try {
+					dos.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (dis != null) {
+				try {
+					dis.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (process != null) {
+				process.destroy();
+			}
+		}
+	}
+
+	private String getStrFromDataInPutStream(DataInputStream dos) {
+		if (null == dos) {
+			return "";
+		}
+		int BUFFER_SIZE = 512;
+		byte[] buffer = new byte[BUFFER_SIZE];
+		StringBuilder result = new StringBuilder();
+		try {
+			while (true) {
+				int read = dos.read(buffer);
+				if (read > 0) {
+					result.append(new String(buffer, 0, read));
+				}
+				if (read < BUFFER_SIZE) {
+					break;
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return result.toString();
+	}
 	
 	public boolean isSpiritVersion() {
 		return Build.VERSION.SDK_INT <= 25;

--
Gitblit v1.6.2