【问题标题】:Android - uninstall other system app as system appAndroid - 将其他系统应用卸载为系统应用
【发布时间】:2018-11-12 21:24:30
【问题描述】:

我的应用在自定义 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)

有人知道如何实现我想要做的事情吗?

【问题讨论】:

    标签: android kotlin android-source android-package-managers


    【解决方案1】:
    1. 卸载System apps不需要root设备,或者你有没有找到无需root的方法?

    2. 您必须 remount 系统,因为您运行 SELinux,才能重新排列系统中锁定的文件。

    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 然后重新启动系统

    【讨论】:

    • 有问题的设备没有root,所以这可能不起作用。我的应用虽然有系统权限,但我想如果不按照你说的重新安装系统,它就无法使用。
    • 如果您还有时间进行开发,请在此处尝试,mount -o rw,remount /system ,方法 2。通过终端您应该运行上面的代码。在进一步开发之前在本地尝试这个 --> android.stackexchange.com/questions/110927/…
    • 您正在运行/定位的 Android 版本是什么?
    • 我会调查的 - 感谢您的帮助。我的目标是 8.1
    • 根据我的经验,这应该适用于奥利奥。我一直都在mount -o rw,remount /system
    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2012-06-09
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多