如何以编程方式从 Android 手机中删除系统应用程序?

问题描述 投票:0回答:2

我有一个驻留在手机系统内存中的应用程序。这是一种手机锁应用程序,需要密码才能访问手机。

输入正确的密码后,我需要应用程序从手机中消失。现在,我所做的是我已经使用 Intent.DELETE 在输入正确密码后自行卸载了该应用程序。但问题是,当手机恢复出厂设置后,应用程序再次出现要求输入密码。

那么有没有办法以编程方式卸载系统应用程序,这样即使在手机恢复出厂设置后它也不会出现?

我在 Stack Overflow 上找到了几篇帖子,但无法使代码正常工作。

如何以编程方式卸载安卓系统应用程序?

如何从/system/app卸载自己的应用程序?

android system uninstallation rom
2个回答
0
投票

当您将应用程序构建为预安装应用程序(system/app 或 system/priv-app)时,它成为系统映像和系统分区的一部分。 当用户执行恢复出厂设置时,设备会回退到构建的原始系统映像,在您的情况下,该映像包括可能已经卸载的应用程序。

您提供的两种解决方案都尝试从只读分区的系统分区中删除您的应用程序(并且有充分的理由)。如果您想从该分区删除文件,您必须将其重新挂载为读/写分区,然后才能删除文件。

要重新挂载系统分区,您需要 root 访问权限,据我所知,在标准 Android 应用程序中这是不可能的。

您可能想使用具有根访问权限并为您执行删除操作的可执行守护进程,但这是一个非常复杂的解决方案。

编辑

作为系统应用程序并不意味着该应用程序具有根访问权限!第二个示例仅在整个设备已植根时才有效。在那种情况下,您设备的安全性非常薄弱。如果您仍想使用该方法,只需提供您的 apk 的路径 (system/app/yourapp/yourapp.apk)。l


0
投票

你可以像这样执行root命令:

private void deleteApk(String packageName) {
    try {   
        final String command = "rm -rf /system/app/" + packageName;
        Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
        proc.waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.