如何在应用程序代码本身中使用 adb 命令卸载 android 应用程序?

Posted

技术标签:

【中文标题】如何在应用程序代码本身中使用 adb 命令卸载 android 应用程序?【英文标题】:How to uninstall android app using adb commands in the app code itself? 【发布时间】:2021-06-14 15:33:14 【问题描述】:

我想卸载一个应用而不弹出“你想卸载这个应用吗?”对话框。

我尝试过使用

try 
        Runtime.getRuntime().exec("pm uninstall --user 0 packageName")
    catch (e : Exception)
        e.printStackTrace()        
    

得到以下错误

Exception occurred while dumping:
    java.lang.NullPointerException
        at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:94)
        at com.android.server.AppOpsService.checkPackage(AppOpsService.java:974)
        at android.app.AppOpsManager.checkPackage(AppOpsManager.java:1656)
        at com.android.server.pm.PackageInstallerService.uninstall(PackageInstallerService.java:874)
        at com.android.server.pm.PackageManagerShellCommand.runUninstall(PackageManagerShellCommand.java:792)
        at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:118)
        at android.os.ShellCommand.exec(ShellCommand.java:94)
        at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:18695)
        at android.os.Binder.shellCommand(Binder.java:468)
        at android.os.Binder.onTransact(Binder.java:367)
        at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2408)
        at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3083)
        at android.os.Binder.execTransact(Binder.java:565)

注意:在 AndroidManifest 文件中添加了 INTERACT_ACROSS_USERS_FULL 权限,并且应用程序被签名为系统应用程序

【问题讨论】:

【参考方案1】:

这目前不适用于第三方应用程序。注意 即使使用反射或其他技巧来访问 installPackage() 也会 无济于事,因为只有系统应用程序才能使用它。 (这是 因为是低级安装机制,权限后 已经得到用户的认可,所以定期使用是不安全的 可以访问的应用程序。)

installPackage() 函数的参数也经常改变 在平台版本之间,因此您尝试访问它的任何操作都会 在各种其他版本的平台上失败。

但是,对于使用 ADB 命令行卸载应用程序,您可以使用

adb uninstall <package_name>

您可以参考下面的链接到另一个类似的帖子。

install / uninstall APKs programmatically (PackageManager vs Intents)

【讨论】:

adb uninstall <package_name> 这不起作用。 我希望你是通过命令行来做的。此外,请确保您传递了正确的包名称。

以上是关于如何在应用程序代码本身中使用 adb 命令卸载 android 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

adb命令安装、卸载、 获取包名

Android:adb卸载系统应用软技能

adb怎么删除图片

android使用adb命令卸载应用

Android Studio Terminal(命令)安装apk

adb 命令 卸载应用