当前位置:首页 > 系统 > Android > 正文内容

Android 17 米币支付“由 shell 所管理”状态的双向控制:挂起与恢复

Android2周前 (09-27)


摘要

本文记录一次 Android 17 设备上米币支付报错“米币支付目前无法使用。该应用是由 shell 所管理”的完整排查与解决过程,并进一步给出反向操作:如何再次将米币支付及相关组件恢复为“由 shell 所管理”的挂起状态。文章涵盖 Android 挂起(suspend)机制、pm suspend 与 pm unsuspend 的用法、pm disable-user 与挂起的区别,以及 installer=null 的实际含义,供遇到同类问题的开发者与高级用户参考。


环境

  • 系统:Android 17

  • 设备:Xiaomi 系列

  • 终端:系统内置 Linux 终端(com.android.virtualization.terminal)

  • 可能涉及工具:Shizuku、Scene、小黑屋等应用管理/冻结工具

  • 相关包:

    • com.xiaomi.payment

    • com.mipay.wallet

    • com.xiaomi.mis

    • com.xiaomi.minigame


问题现象

打开米币支付或在小游戏等场景调用米币支付时,提示:

米币支付目前无法使用。该应用是由 shell 所管理。

支付流程中断,无法完成。


排查过程

1. 排除应用被禁用

首先检查是否有支付相关包被 disable-user 禁用:

pm list packages -d

输出仅包含系统组件:

package:com.qualcomm.qti.services.systemhelper
package:com.android.virtualization.terminal
package:com.android.devicelockcontroller

没有小米支付/钱包相关包。说明问题不是“禁用”,而是其他管控状态。

2. 检查安装器来源

执行:

pm list packages -i | grep -i -E "mipay|payment|wallet|xiaomi.mi"

输出中相关包均为:

package:com.xiaomi.payment  installer=null
package:com.mipay.wallet  installer=null
package:com.xiaomi.mis  installer=null
package:com.xiaomi.minigame  installer=null

installer=null 表示这些包并非通过常规应用商店安装,常见于系统预装或 ADB 侧载。它本身并不等同于“由 shell 管理”,因此排除安装器是直接原因。

3. 定位挂起状态

Android 中除了“禁用”外,还有“挂起”(suspend)。挂起不会出现在 pm list packages -d 中。对相关包逐个执行解除挂起命令:

pm unsuspend --user 0 com.xiaomi.minigame
pm unsuspend --user 0 com.xiaomi.mis
pm unsuspend --user 0 com.mipay.wallet
pm unsuspend --user 0 com.xiaomi.payment

输出均为:

Package com.xiaomi.minigame new suspended state: false
Package com.xiaomi.mis new suspended state: false
Package com.mipay.wallet new suspended state: false
Package com.xiaomi.payment new suspended state: false

new suspended state: false 说明这些包此前确实处于挂起状态,现已成功解除。

4. 重启验证

解除挂起后重启设备,再次打开米币支付,报错消失,支付功能恢复正常。


根因分析

问题本质是 Android 的应用挂起机制与支付安全检测共同作用的结果。

Shizuku、Scene、小黑屋等工具通常以 shell 身份运行,通过 pm suspend 将应用置于挂起状态。挂起后,系统会记录挂起者信息,通常为 com.android.shell。米币支付在启动或支付时检测到自身或依赖组件(如 com.mipay.wallet、com.xiaomi.mis)被 shell 挂起,判定运行环境不可信,从而拒绝提供服务,并提示“由 shell 所管理”。

关键点:

  • pm suspend 是挂起,不是禁用;

  • pm list packages -d 只能看到禁用包,看不到挂起包;

  • 挂起状态会留下 suspendingPackage=com.android.shell 标记;

  • 支付类应用对此类标记非常敏感。


解决方案:解除挂起,恢复米币支付

标准恢复步骤

在具备 shell 权限的终端中执行:

pm unsuspend --user 0 <包名>

对多个相关包可批量执行:

for pkg in com.xiaomi.payment com.mipay.wallet com.xiaomi.mis com.xiaomi.minigame; do
  pm unsuspend --user 0 $pkg
done

如果同时存在禁用状态,可补充:

pm enable --user 0 <包名>

必要时重置 AppOps:

cmd appops reset <包名>

最后重启设备。

权限说明

  • 在电脑端使用:adb shell pm unsuspend --user 0 <包名>

  • 使用 Shizuku 时:先进入 rish,再执行 pm unsuspend ...

  • 在手机本地终端直接执行时,终端必须已获得 shell 权限;否则会提示 Permission Denial

  • 注意:手机本地 shell 中不存在 adb 命令,adb shell 只能在电脑端使用

验证命令

pm list packages -i | grep -E "mipay|payment|wallet"
dumpsys package com.xiaomi.payment | grep -i suspend

若 dumpsys 中不再出现 suspended=true 或 suspendingPackage=com.android.shell,说明已恢复。


反向操作:重新将米币支付置为“由 shell 所管理”

如果希望再次让米币支付显示“由 shell 所管理”,核心是让它再次被系统挂起(suspend)。这与你之前解除挂起的操作正好相反,现在需要执行 pm suspend 命令。

核心命令

在你之前使用的手机终端(hongkong:/ $)或电脑 ADB 中,执行以下命令即可将米币支付及其相关组件重新置于“由 shell 管理”的挂起状态:

pm suspend --user 0 com.xiaomi.payment
pm suspend --user 0 com.mipay.wallet
pm suspend --user 0 com.xiaomi.mis
pm suspend --user 0 com.xiaomi.minigame

pm suspend 是 Android 系统提供的标准命令,用于通过 shell 身份挂起应用。命令执行后,应用会保留在桌面和设置中,但无法正常启动或交互,系统会记录其挂起状态,并标记为 suspendingPackage=com.android.shell,这正是“由 shell 所管理”提示的来源。

如果使用 Shizuku,也可以在其终端(rish)中执行相同命令。

批量挂起

for pkg in com.xiaomi.payment com.mipay.wallet com.xiaomi.mis com.xiaomi.minigame; do
  pm suspend --user 0 $pkg
done

验证挂起状态

执行完成后,可以通过以下命令确认是否已成功挂起:

dumpsys package com.xiaomi.payment | grep -i suspend

如果输出中包含 suspended=true 或 suspendingPackage=com.android.shell,就说明已成功恢复为“由 shell 所管理”的状态。

再次恢复支付

挂起后,米币支付会再次报错“由 shell 所管理”。如果之后想恢复正常,只需执行之前用过的解除命令即可:

pm unsuspend --user 0 com.xiaomi.payment

以此类推,对其他几个包执行相同操作,然后重启设备。

注意事项

  • 挂起会影响应用功能:被挂起的应用将无法启动或响应,因此执行 pm suspend 后,米币支付将无法使用,直到你再次执行 pm unsuspend 解除。

  • 建议重启验证:和解除挂起一样,挂起操作后也建议重启设备,以确保状态完全生效。

  • 操作权限:在手机本地终端执行需要 shell 权限;如果提示 Permission Denial,请改用电脑 ADB 或 Shizuku 的 rish 环境执行。

  • 避免误操作:支付类应用被挂起后可能影响其他依赖组件,建议仅在测试或明确需要时执行。


状态切换命令速查

  • 解除挂起(恢复正常支付):

    pm unsuspend --user 0 <包名>
  • 重新挂起(显示“由 shell 所管理”):

    pm suspend --user 0 <包名>
  • 查看挂起状态:

    dumpsys package <包名> | grep -i suspend
  • 查看禁用状态:

    pm list packages -d

经验总结

  1. 区分禁用与挂起:pm list packages -d 查禁用,pm unsuspend 解挂起。两者机制不同,排查时不能只查禁用。

  2. installer=null 不等于 shell 管理:侧载或预装包常见 installer=null,不应作为直接判断依据。

  3. 支付类应用避免冻结/挂起:米币支付、小米钱包等对运行环境敏感,使用 Shizuku/Scene/小黑屋时不要将它们加入冻结或挂起列表。

  4. 检查 Shizuku 托管列表:若 Shizuku 在 Android 17 上出现托管列表异常,可尝试重启 Shizuku 或更换兼容版本。

  5. 恢复后重启:挂起状态可能有残留,重启后验证最可靠。

  6. 安装来源尽量走官方商店:若问题反复,可卸载后从小米应用商店重装,使 installer 变为 com.xiaomi.market,同时重置管控状态。

  7. 挂起与解除可双向切换:pm suspend 与 pm unsuspend 是一对反向命令,可在需要时灵活控制应用状态。


结论

“米币支付目前无法使用。该应用是由 shell 所管理”并非 Android 17 系统缺陷,而是应用被以 shell 身份挂起后触发的安全拦截。通过 pm unsuspend --user 0 <包名> 解除挂起并重启设备即可恢复支付;反之,通过 pm suspend --user 0 <包名> 可再次将应用置为“由 shell 所管理”的挂起状态。理解 Android 的 suspend 机制与 shell 管理标记,有助于快速定位并灵活控制同类支付、银行、安全类应用的行为。

转载请注明出处。

本文链接:http://pythonopen.com/?id=7964

返回列表

上一篇:黑阈 优化android

没有最新的文章了...

相关文章

黑阈 优化android

miuipm uninstall --user 0 包名快应用com.miui.hybrid浏览器c...