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 |  160 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 117 insertions(+), 43 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 46359c6..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,24 +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;
 
 public class Utils {
 
@@ -67,8 +62,7 @@
 	Thread thread_set_time_reboot = null;
 	Thread thread_STOP_WATCH_DOG = null;
 	Thread thread_AlarmPower_Repeat_Poweroff = null;
-	
-	
+
 	
 
 	public Utils(Context context) {
@@ -80,7 +74,6 @@
 		sharedPreferences = context.getSharedPreferences(shapre, context.MODE_PRIVATE);
 		editor = sharedPreferences.edit();
 	}
-	
 	
 	public void shut_Down()
 	{
@@ -250,26 +243,30 @@
 			return;
 		}
 		
-		
-		AlarmPowerManager mAlarmPowerManager = new AlarmPowerManager();
-		
-		mAlarmPowerManager.removeAllalarmPower();
-		
+		if (isSpiritVersion()) {
+			new AlarmPowerManager().removeAllalarmPower();
+			setFileState("0", "/sys/class/minix-rtc/MCURTCDATA");
+		} else {
+			MyApplication.getApplication().getAndroidAPI().alarm_removeAllalarmPower();
+			setFileState("0", "/sys/class/minix-rtc/minix_RTC_DATA");
+		}
+
 		editor.putString(repeat_alarm_poweron_time, "");
 		editor.putString(repeat_alarm_poweroff_time, "");
 		editor.commit();
-		
-		setFileState("0", "/sys/class/minix-rtc/MCURTCDATA");
-		
+
 		if(active)
 		{
 			if(repeat.equals("true"))
 			{
-				SpiritAlarmManager mSpiritAlarmManager = new SpiritAlarmManager();
-				mSpiritAlarmManager.setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
-								
-				setFileState("1", "/sys/class/minix-rtc/MCURTCDATA");
-				
+				if (isSpiritVersion()) {
+					new SpiritAlarmManager().setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
+					setFileState("1", "/sys/class/minix-rtc/MCURTCDATA");
+				} else {
+					MyApplication.getApplication().getAndroidAPI().alarm_setSpiritAlarmWithDay(1, hms_on[0], hms_on[1]);
+					setFileState("1", "/sys/class/minix-rtc/minix_RTC_DATA");
+				}
+
 				editor.putString(repeat_alarm_poweron_time, hms_on[0]+":"+hms_on[1]+":"+0);
 				editor.putString(repeat_alarm_poweroff_time, hms_off[0]+":"+hms_off[1]+":"+0);
 				editor.commit();
@@ -284,22 +281,37 @@
 				editor.commit();
 				
 				Calendar calendar = Calendar.getInstance();
-				
-				// 改接口 setSpiritAlarmWithDay()
-				mAlarmPowerManager.CreatOneAlarmPower(calendar.get(Calendar.YEAR)+"", 
-													  calendar.get(Calendar.MONTH)+1+"", 
-													  calendar.get(Calendar.DAY_OF_MONTH)+"", 
-													  hms_on[0]+"", 
-													  hms_on[1]+"", 
-													  hms_on[2]+"", 
-													  hms_off[0]+"", 
-													  hms_off[1]+"", 
-													  hms_off[2]+"", 
-													  hms_on[0]>12? "0":"1", 
-													  hms_off[0]>12? "0":"1");
-				
-				mAlarmPowerManager.updateAlarmPowerActive(0, active+"");
-				
+
+				if (isSpiritVersion()) {
+					// 改接口 setSpiritAlarmWithDay()
+					new AlarmPowerManager().CreatOneAlarmPower(calendar.get(Calendar.YEAR)+"",
+							calendar.get(Calendar.MONTH)+1+"",
+							calendar.get(Calendar.DAY_OF_MONTH)+"",
+							hms_on[0]+"",
+							hms_on[1]+"",
+							hms_on[2]+"",
+							hms_off[0]+"",
+							hms_off[1]+"",
+							hms_off[2]+"",
+							hms_on[0]>12? "0":"1",
+							hms_off[0]>12? "0":"1");
+
+					new AlarmPowerManager().updateAlarmPowerActive(0, active+"");
+				} else {
+					MyApplication.getApplication().getAndroidAPI().alarm_creatOneAlarmPower(calendar.get(Calendar.YEAR)+"",
+							calendar.get(Calendar.MONTH)+1+"",
+							calendar.get(Calendar.DAY_OF_MONTH)+"",
+							hms_on[0]+"",
+							hms_on[1]+"",
+							hms_on[2]+"",
+							hms_off[0]+"",
+							hms_off[1]+"",
+							hms_off[2]+"",
+							hms_on[0]>12? "0":"1",
+							hms_off[0]>12? "0":"1");
+
+					MyApplication.getApplication().getAndroidAPI().alarm_updateAlarmPowerActive(0, active+"");
+				}
 			}
 		}
 	}
@@ -666,8 +678,70 @@
 		
 		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