是否可以以编程方式卸载 Android 中的软件包

Posted

技术标签:

【中文标题】是否可以以编程方式卸载 Android 中的软件包【英文标题】:Is it possible to programmatically uninstall a package in Android 【发布时间】:2010-10-27 19:53:47 【问题描述】:

包可以自行卸载吗?如果它们共享相同的 userId 和签名,一个包可以卸载另一个包吗?

【问题讨论】:

感谢您的询问...我知道有一个名为“轻松卸载”的第三方应用程序可以让您卸载软件包,所以也许我们应该查看源代码。 意图意图=新意图(意图.ACTION_DELETE); intent.setData(Uri.parse("package:"+supportModel.getPackageName())); intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); startActivityForResult(intent, UNINSTALL_REQUEST_CODE); 【参考方案1】:
Uri packageURI = Uri.parse("package:"+"your.packagename.here");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);

【讨论】:

【参考方案2】:

第 3 方应用程序无法以编程方式安装或卸载任何其他软件包,这会给 android 带来安全风险。但是,第 3 方应用程序可以要求 Android 操作系统使用意图安装或卸载包,这个问题应该提供更完整的信息:

install / uninstall APKs programmatically (PackageManager vs Intents)

【讨论】:

2017年我们现在可以吗?【参考方案3】:

在 Kotlin 中,使用 API 14+,您只需调用以下代码:

startActivity(Intent(Intent.ACTION_UNINSTALL_PACKAGE).apply 
     data = Uri.parse("package:$packageName")
)

或使用 Android KTX:

startActivity(Intent(Intent.ACTION_UNINSTALL_PACKAGE).apply 
     data = "package:$packageName".toUri()
)

它将显示您应用的卸载提示。如果需要,您可以将packageName 更改为其他应用的任何包名称。

【讨论】:

【参考方案4】:

第三方应用无法静默卸载应用!

您需要成为系统应用才能获得 DELETE_PACKAGES 权限,否则您需要显示卸载弹出窗口(用户确认)

或者,您可以获取辅助功能权限,然后通过显示辅助功能叠加层,您可以告诉您的服务点击卸载按钮!但这将侵犯隐私。

【讨论】:

这种情况下如何私下卸载?如果没有代码,作为系统应用并拥有 DELETE_PACKAGES 权限将无济于事。

以上是关于是否可以以编程方式卸载 Android 中的软件包的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式停用 Android 中的设备管理员?

Android中的省电模式以编程方式控制?

是否可以在 android 中以编程方式创建和填充 AutoCompleteTextView?

是否可以在 android 中以编程方式创建 string.xml 文件?

如何以编程方式卸载 Windows 中的应用程序?

是否可以以编程方式在 Android 中收听扬声器输出?