首页 > 解决方案 > Android - 将其他系统应用卸载为系统应用

问题描述

我的应用在自定义 AOSP 映像上作为系统应用运行。我能够卸载/安装我从后端下载的其他 APK。但是,我无法卸载其他系统应用程序(这对我来说是一项硬性要求)。我目前的机制是通过反射使用 Android 包管理器中的 deletePackage 机制:

val cPackageManager = Class.forName("android.content.pm.PackageManager")
cPackageDeleteObserver = Class.forName("android.content.pm.IPackageDeleteObserver")
deletePackage = cPackageManager.getMethod("deletePackage", String::class.java, cPackageDeleteObserver, Integer.TYPE)
deletePackage!!.invoke(context.packageManager, packageName, deleteObserver, DELETE_ALL_USERS)

有人知道如何实现我想要做的事情吗?

标签: androidkotlinandroid-sourceandroid-package-managers

解决方案


  1. 您是否不需要成为有根设备才能卸载System apps,或者您是否找到了无需任何根的方法来执行此操作?

  2. 由于您运行 SELinux,因此您必须remount让系统能够重新排列系统中锁定的文件。

3.您可以在您的应用程序中运行此代码

try{
 Process su = Runtime.getRuntime().exec("su");
 DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

 outputStream.writeBytes("pm uninstall com.package.name");
 outputStream.flush();
 outputStream.writeBytes("exit\n");
 outputStream.flush();
 su.waitFor();
}catch(IOException e){
 throw new Exception(e);
}catch(InterruptedException e){
 throw new Exception(e);
}

如果pm uninstall不起作用,请使用rm -rf path/deletefolder然后重新启动系统


推荐阅读