是否可以以编程方式卸载 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 中以编程方式创建和填充 AutoCompleteTextView?