17

假设我们在 Android 设备中启用了工作配置文件 (Android For Work)。有谁知道如何在工作资料而不是个人资料中通过 ADB 安装 APK。

我已经看过 ADB 文档,并且有一种方法可以获取用户 ID,但使用相同的 ID 我无法安装 APK。

要获取 ID:adb shell pm list users 安装命令:adb install -r --user 12 app_name.apk

错误信息 :

Performing Streamed Install
adb: failed to install app-prodDebug.apk: Security exception: Shell does not have permission to access user 12
 com.android.server.am.ActivityManagerService.handleIncomingUser:22541 android.app.ActivityManager.handleIncomingUser:3989 com.android.server.pm.PackageManagerShellCommand.translateUserId:2434

java.lang.SecurityException: Shell does not have permission to access user 12
 com.android.server.am.ActivityManagerService.handleIncomingUser:22541 android.app.ActivityManager.handleIncomingUser:3989 com.android.server.pm.PackageManagerShellComma

有什么办法可以解决这个问题?我的用例是替换启用了调试选项的应用程序,以便我可以解决安装在工作配置文件中的特定应用程序发生的任何问题。

4

4 回答 4

12
adb push android.apk /data/local/tmp
adb shell pm install --user 12 /data/local/tmp/android.apk
于 2019-12-03T00:22:15.900 回答
3
  • @jtmcodle 的上述解决方案工作正常。

  • 但要找出用户ID,请使用以下命令

  • adb shell dumpsys user

  • 在我的情况下,上面的命令给出了以下输出

  • UserInfo{11:10100030} serialNo=11

  • 所以我在命令下面运行以使其工作

  • adb shell pm install --user 12 /data/local/tmp/android.apk

于 2020-10-07T02:46:31.957 回答
0

如果接受的答案 ( https://stackoverflow.com/a/59148545/1667216 ) 不起作用,请在运行这两个步骤之前从您的 DPC 调用以下命令:

devicePolicyManager.clearUserRestriction(componentName,UserManager.DISALLOW_DEBUGGING_FEATURES

其中“componentName”是扩展 DeviceAdminReceiver 的类的 ComponentName。

于 2021-06-03T03:41:13.243 回答
0

根据 Android 开发者网站,如果您使用命令通过 usb 安装应用程序adb,它将安装在两个配置文件中:

Android 开发者网站

如果您通过 USB 数据线手动将应用程序安装到具有工作配置文件的设备上,则该应用程序会同时安装在个人配置文件和工作配置文件上。安装应用程序后,您可以在以下条件下测试应用程序:

于 2021-08-23T17:03:30.017 回答