Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xiaomi HyperOS cannot disable system packages #902

Open
Angelenx opened this issue May 8, 2024 · 22 comments
Open

Xiaomi HyperOS cannot disable system packages #902

Angelenx opened this issue May 8, 2024 · 22 comments

Comments

@Angelenx
Copy link

Angelenx commented May 8, 2024

在小米最新的澎湃OS(Android 14)中,"停用功能"对于系统应用(如谷歌服务)已失效,而这同时也导致了“动态GMS”功能失效;而已知基于设备管理员的“应用隐藏”和“应用暂停”能够在此环境使用,因此我建议能够加入使用设备管理员权限或者Dhizuku进行对应用进行隐藏和暂停的功能。

@vvb2060
Copy link
Collaborator

vvb2060 commented May 8, 2024

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

@Angelenx
Copy link
Author

Angelenx commented May 8, 2024

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

以下是终端输出:
Exception occurred while executing 'disable-user':
java.lang.SecurityException: Cannot disable system packages.
at com.android.server.pm.PackageManagerServiceImpl.canBeDisabled(PackageManagerServiceImpl.java:642)
at com.android.server.pm.PackageManagerService.setEnabledSettings(PackageManagerService.java:4061)
at com.android.server.pm.PackageManagerService.-$$Nest$msetEnabledSettings(Unknown Source:0)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.setApplicationEnabledSetting(PackageManagerService.java:5928)
at com.android.server.pm.PackageManagerShellCommand.runSetEnabledSetting(PackageManagerShellCommand.java:2502)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:273)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:6551)
at android.os.Binder.shellCommand(Binder.java:1075)
at android.os.Binder.onTransact(Binder.java:895)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4352)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6535)
at android.os.Binder.execTransactInternal(Binder.java:1351)
at android.os.Binder.execTransact(Binder.java:1282)

应用没有被禁用

@liudongmiao
Copy link
Contributor

目前没有计划~有发邮件给小米,他们没有回复。

@vvb2060
Copy link
Collaborator

vvb2060 commented May 8, 2024

    void canBeDisabled(String packageName, int newState) {
        int callingUid = Binder.getCallingUid();
        if (newState == COMPONENT_ENABLED_STATE_DEFAULT || newState == COMPONENT_ENABLED_STATE_ENABLED) {
            return;
        }
        try {
            if (Settings.Global.getInt(this.mContext.getContentResolver(), "maintenance_mode_user_id") == 110) {
                return;
            }
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
        if (callingUid == 2000) {
            if ("com.android.cts.priv.ctsshim".equals(packageName)) {
                return;
            }
            PackageStateInternal ps = this.mPms.snapshotComputer().getPackageStateInternal(packageName);
            if (ps != null && ps.isSystem() && newState == COMPONENT_ENABLED_STATE_DISABLED_USER) {
                throw new SecurityException("Cannot disable system packages.");
            }
        }
        if (ArrayUtils.contains(MIUI_CORE_APPS, packageName)) {
            throw new SecurityException("Cannot disable miui core packages.");
        }
        if ("co.sitic.pp".equals(packageName) && shouldLockAppRegion()) {
            throw new SecurityException("Cannot disable carrier core packages.");
        }
    }

@vvb2060
Copy link
Collaborator

vvb2060 commented May 8, 2024

settings put global maintenance_mode_user_id 110 即可修复

@Angelenx
Copy link
Author

Angelenx commented May 8, 2024

settings put global maintenance_mode_user_id 110 即可修复

thx

@vvb2060
Copy link
Collaborator

vvb2060 commented May 8, 2024

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

@Angelenx
Copy link
Author

Angelenx commented May 8, 2024

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

好的,谢谢了

@vvb2060 vvb2060 changed the title 关于使用“停用应用”功能的一个问题以及建议 Xiaomi HyperOS cannot disable system packages May 8, 2024
@Angelenx
Copy link
Author

Angelenx commented May 8, 2024

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

请问如果长时间保持这个维修模式会有什么负面影响吗?

@vvb2060
Copy link
Collaborator

vvb2060 commented May 8, 2024

不清楚,这是一个标识符,系统的一些行为会发生变化,但不知道具体哪些,所以最好删除。
这事在黑阈内做会很方便 @liudongmiao 要做吗?

@Angelenx
Copy link
Author

Angelenx commented May 8, 2024

不清楚,这是一个标识符,系统的一些行为会发生变化,但不知道具体哪些,所以最好删除。 这事在黑阈内做会很方便 @liudongmiao 要做吗?

这么说这个方法其实不安全,集成进黑阈会不会不太好?
目前已发现添加此标识符会导致密码和生物识别设置无法设置和修改。

@liudongmiao
Copy link
Contributor

我会考虑一下,即使处理,也是黑阈自动设置,停用后自动退出。

即使用的话,也会是一个 实验性功能。

@liudongmiao
Copy link
Contributor

    .line 643
    const-string v1, "com.lbe.security.miui"
    const-string v2, "com.miui.securitycenter"
    const-string v3, "com.android.updater"
    const-string v4, "com.xiaomi.market"
    const-string v5, "com.xiaomi.finddevice"
    const-string v6, "com.miui.home"
    filled-new-array/range {v1 .. v6}, [Ljava/lang/String;
    move-result-object v0
    sput-object v0, Lcom/android/server/pm/PackageManagerServiceImpl;->MIUI_CORE_APPS:[Ljava/lang/String;

@liudongmiao
Copy link
Contributor

liudongmiao commented May 9, 2024

经过测试,进入维修模式之后 maintenance_mode_user_id 为 110,退出后为 -10000。

但是,手动设置 maintenance_mode_user_id 为 110,并不会触发维修模式,其它未知。

(可能需要反编译全部小米系统,才能知道全部使用场景。)

不过,黑阈会加入这个实验性功能,停用系统应用前设置该值,停用后删除该值。

@Angelenx
Copy link
Author

Angelenx commented May 9, 2024

经过测试,进入维修模式之后 maintenance_mode_user_id 为 110,退出后为 -1000。

但是,手动设置 maintenance_mode_user_id 为 110,并不会触发维修模式,其它未知。

(可能需要反编译全部小米系统,才能知道全部使用场景。)

不过,黑阈会加入这个实验性功能,停用系统应用前设置该值,停用后删除该值。

手动设置 maintenance_mode_user_id 为 110确实并不会触发维修模式,但是目前发现这会导致系统设置中密码和指纹异常,但不影响正常使用,只是不能更改密码和指纹的相关设置,且会在手动恢复改标识符后恢复正常。

另,我这边测试退出维修模式该值会变为-10000,机型是Redmi K70 Pro。

@liudongmiao
Copy link
Contributor

另,我这边测试退出维修模式该值会变为-10000,机型是Redmi K70 Pro。

嗯,我写错了,我这边也是 -10000

@liudongmiao
Copy link
Contributor

@Angelenx 请测试这个版本:

https://dl.jianyv.com/br/alpha/

  1. 目前还没有实验性选项...临时进入维修模式然后退出,确实需要实验模式
  2. 还没有加 miui 默认的禁止白名单

@Angelenx
Copy link
Author

@Angelenx 请测试这个版本:

https://dl.jianyv.com/br/alpha/

  1. 目前还没有实验性选项...临时进入维修模式然后退出,确实需要实验模式
  2. 还没有加 miui 默认的禁止白名单

好的,已安装,目前没有发现问题。

@Angelenx
Copy link
Author

Angelenx commented May 26, 2024

目前该alpha版本未出现其他问题,建议将此功能加入实验性选项,加入beta版本,扩大测试范围。

@HeslaHeim
Copy link

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

谢谢大佬.虽然我是小白,但我知道手机设置里可以打开维修模式,然后就可以正常使用了 disable 了

@52fhy
Copy link

52fhy commented Jun 18, 2024

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

手动进入维修模式,可以执行这个命令。执行后退出维修模式:

adb shell pm disable-user com.miui.systemAdSolution
Package com.miui.systemAdSolution new state: disabled-user

@Angelenx
Copy link
Author

在最新的小米Hyperos2.0中,这个方法已经失效。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants