使用adb设置App为设备所有者失败:多用户提示与实际不符
我碰到过不少Android 7.x设备出现这类情况——明明系统设置里看不到其他用户,但adb就是揪着"多用户"的问题报错。这其实是因为Android 5.0之后的多用户机制更完善,系统里会存在一些隐藏用户(比如来宾用户、工作资料关联用户,甚至某些预装应用创建的内部用户),这些用户在设置界面不显示,但会触发设备所有者的权限限制。
给你几个一步步的解决办法:
第一步:排查系统内所有用户(包括隐藏的)
先通过adb命令确认到底有没有隐藏用户,执行:adb shell pm list users输出大概是这样的:
UserInfo{0:Owner:13} running
UserInfo{10:Guest:10} running这里的
10就是隐藏的来宾用户ID,这类用户就是导致报错的元凶。第二步:删除多余的隐藏用户
针对列表里除主用户(ID通常是0)之外的用户,用以下命令删除:adb shell pm remove-user <USER_ID>比如要删除ID为10的来宾用户,就执行:
adb shell pm remove-user 10执行成功后会返回
Success提示。第三步:检查并移除工作资料(如果存在)
有些设备的"应用双开"或"工作资料"功能会悄悄创建关联用户,即使设置里没显示。可以用命令查看设备策略信息:adb shell dumpsys device_policy如果输出里有
Work profile相关内容,说明存在工作用户,同样用pm remove-user命令删除对应的用户ID即可。第四步:重启设备后重试设置命令
删除用户后建议重启设备,之后再执行你的设备所有者设置命令:adb shell dpm set-device-owner <你的包名>/<DeviceOwnerReceiver路径>极端情况(需Root权限)
如果以上方法都没用,可能是联想设备预装的系统应用创建了特殊隐藏用户。你可以尝试获取Root权限后,进入/data/system/users/目录——这里每个数字命名的文件夹对应一个用户,除了0文件夹(主用户)之外,其他都可以删除(操作前建议备份该目录),重启设备后再试。
至于为什么之前三星Tab A(4.4.2)能正常运行?因为Android 4.4的多用户机制还比较简单,系统不会保留这类隐藏用户,对设备所有者的权限限制也没那么严格;到Android 7.x之后,系统对多用户的检测和权限管控都大幅加强,所以才会出现这个差异。
内容的提问来源于stack exchange,提问作者SliderUK

