MobyDroid icon indicating copy to clipboard operation
MobyDroid copied to clipboard

App Manager breaks when having a work profile and/or secure folder.

Open My1 opened this issue 1 year ago • 3 comments

According to this section https://github.com/ibilux/MobyDroid/blob/master/src/com/hq/mobydroid/device/TaskPackageMangerList.java#L41

the app manager invokes adb shell pm list packages

however that command basically fails completely when you have multiple users like Samsung's Secure Folder or an Android Enterprise Work Profile.

Exception occurred while executing 'list':
java.lang.SecurityException: Shell does not have permission to access user 11
 com.android.server.am.ActivityManagerService.handleIncomingUser:14999 android.app.ActivityManager.handleIncomingUser:4805 com.android.server.pm.PackageManagerShellCommand.translateUserId:3517 
        at com.android.server.am.UserController.handleIncomingUser(UserController.java:2680)
        at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:14999)
        at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:4805)
        at com.android.server.pm.PackageManagerShellCommand.translateUserId(PackageManagerShellCommand.java:3517)
        at com.android.server.pm.PackageManagerShellCommand.runListPackages(PackageManagerShellCommand.java:969)
        at com.android.server.pm.PackageManagerShellCommand.runListPackages(PackageManagerShellCommand.java:865)
        at com.android.server.pm.PackageManagerShellCommand.runList(PackageManagerShellCommand.java:724)
        at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:226)
        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:7071)
        at android.os.Binder.shellCommand(Binder.java:1085)
        at android.os.Binder.onTransact(Binder.java:903)
        at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4962)
        at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:7055)
        at android.os.Binder.execTransactInternal(Binder.java:1321)
        at android.os.Binder.execTransact(Binder.java:1280)

users can be pulled like this:

adb shell pm list users

Users:
        UserInfo{0:MY-NAME:c13} running
        UserInfo{11:Arbeitsprofil:1030} running       ----> workprofile
        UserInfo{151:Secure Folder:10061030} running

now when you use adb shell pm list packages --user 0 to only query the normal user, it works fine in the shell.

so you could query who the current user is with adb shell am get-current-user and only list that user's app or invoke for each user on its own.

My1 avatar May 23 '24 07:05 My1