android - 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)
有人知道如何实现我想要做的事情吗?
解决方案
您是否不需要成为有根设备才能卸载
System apps
,或者您是否找到了无需任何根的方法来执行此操作?由于您运行 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
然后重新启动系统
推荐阅读
- python - 从 -x 到 +x 的solve_ivp
- postgresql - 如何查找当前时区 EST 或 EDT
- css - 为什么将 ::content 更改为 ::slotted(..) 不起作用?
- c++ - std::map::size_type 用于其 value_type 是它自己的 size_type 的 std::map
- python - 神圣 - 将所有参数作为一个传递
- azure - 在 Azure 虚拟机之间共享具有用户权限的驱动器
- python-3.x - 更新本地包内的数据集
- java - 当我期望它时,CORS 的 Spring 实现不会拒绝消息
- javascript - PHP:在没有 JSON 的情况下将二维数组保存在数据库中
- .net - Swagger/Swashbuckle:忽略基类中的重载端点