[manager-service] Add uninstallPackage

This commit is contained in:
tehcneko 2021-03-06 19:53:48 +08:00
parent cc6155b496
commit d6ea773aa8
4 changed files with 21 additions and 2 deletions

View File

@ -20,10 +20,14 @@
package io.github.lsposed.lspd.service; package io.github.lsposed.lspd.service;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.os.IBinder; import android.os.IBinder;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
import java.util.List; import java.util.List;
import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedBridge;
@ -32,6 +36,8 @@ import io.github.lsposed.lspd.BuildConfig;
import io.github.lsposed.lspd.ILSPManagerService; import io.github.lsposed.lspd.ILSPManagerService;
import io.github.lsposed.lspd.utils.ParceledListSlice; import io.github.lsposed.lspd.utils.ParceledListSlice;
import static io.github.lsposed.lspd.service.ServiceManager.TAG;
public class LSPManagerService extends ILSPManagerService.Stub { public class LSPManagerService extends ILSPManagerService.Stub {
LSPManagerService() { LSPManagerService() {
@ -155,4 +161,15 @@ public class LSPManagerService extends ILSPManagerService.Stub {
public void reboot(boolean confirm, String reason, boolean wait) throws RemoteException { public void reboot(boolean confirm, String reason, boolean wait) throws RemoteException {
PowerService.reboot(confirm, reason, wait); PowerService.reboot(confirm, reason, wait);
} }
@Override
public boolean uninstallPackage(String packageName) throws RemoteException {
try {
PackageService.uninstallPackage(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST));
return true;
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | InstantiationException | IllegalAccessException e) {
Log.e(TAG, e.getMessage(), e);
return false;
}
}
} }

View File

@ -218,7 +218,7 @@ public class PackageService {
} }
} }
private static void uninstallPackage(VersionedPackage versionedPackage) throws RemoteException, InterruptedException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { public static void uninstallPackage(VersionedPackage versionedPackage) throws RemoteException, InterruptedException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
CountDownLatch latch = new CountDownLatch(1); CountDownLatch latch = new CountDownLatch(1);
pm.getPackageInstaller().uninstallExistingPackage(versionedPackage, "com.android.shell", new IntentSenderAdaptor() { pm.getPackageInstaller().uninstallExistingPackage(versionedPackage, "com.android.shell", new IntentSenderAdaptor() {
@Override @Override

View File

@ -34,7 +34,7 @@ public class PowerService {
return pm; return pm;
} }
public static void reboot(boolean confirm, String reason, boolean wait) { public static void reboot(boolean confirm, String reason, boolean wait) throws RemoteException {
IPowerManager pm = getPowerManager(); IPowerManager pm = getPowerManager();
if (pm == null) return; if (pm == null) return;
pm.reboot(confirm, reason, wait); pm.reboot(confirm, reason, wait);

View File

@ -48,4 +48,6 @@ interface ILSPManagerService {
void forceStopPackage(String packageName, int userId) = 23; void forceStopPackage(String packageName, int userId) = 23;
void reboot(boolean confirm, String reason, boolean wait) = 24; void reboot(boolean confirm, String reason, boolean wait) = 24;
boolean uninstallPackage(String packageName) = 25;
} }