Android - 当 运行 作为 Android 11 上的用户时,无法使用 "am start" 启动 activity

Android - Can't start an activity with "am start" when running as user on Android 11

我不知道这是否是一个新的限制,但是对于 Android 11 设备,我不能 运行 来自本机代码或 shell当我 运行 成为我的应用程序用户时。它在没有 运行-as 的情况下工作正常。这是一个新的限制,还是我可以请求应用允许它的一些权限? Android10没有这个问题。

示例:

adb shell
run-as com.example.app
am start -a com.example.app.someactivity

结果是

Exception occurred while executing 'start':
java.lang.SecurityException: Permission Denial: package=com.android.shell does not belong to uid=10262
    at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2598)
    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1081)
    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1072)
    at com.android.server.am.ActivityManagerService.startActivityAsUserWithFeature(ActivityManagerService.java:3678)
    at com.android.server.am.ActivityManagerShellCommand.runStartActivity(ActivityManagerShellCommand.java:544)
    at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:186)
    at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)
    at android.os.ShellCommand.exec(ShellCommand.java:44)
    at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10522)
    at android.os.Binder.shellCommand(Binder.java:929)
    at android.os.Binder.onTransact(Binder.java:813)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5027)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2883)
    at android.os.Binder.execTransactInternal(Binder.java:1159)
    at android.os.Binder.execTransact(Binder.java:1123)

另外,“am start-foreground-service”没有这个问题

无论出于何种原因,此限制都是真实存在的,而且显然没有记录。

我的解决方法是改用“am start-foreground-service”来启动一个新服务,然后可以启动 activity。篮球跳跃,代码臃肿,现在工作。

总而言之,“am start -a”现在在应用程序用户使用时损坏,但“am start-foreground-service”没有,并且服务可以为用户启动 activity(不幸的是,重复了工作了十年但现在消失的功能。