ADB root在模拟器上无法工作(不能在生产版本中以root身份运行)

96

我刚刚更新了模拟器 26.0.3,现在无法在新创建的模拟器上运行adb root命令。

出现的错误如下:

adbd cannot run as root in production builds

我已经尝试过杀死和重新启动adbd,比如:

adb kill-server
adb devices

没有什么帮助,有任何想法吗?


我不确定区别在哪里以及如何选择不同版本,但是如果在创建时启用以下设置,则具有 root 权限。enter image description here


你尝试过使用adb shell并运行“su”吗?它显示相同的内容吗? - Scott Merritt
5个回答

291

启用root访问:选择一个未标记为“Google Play”的模拟器系统映像(Android Studio版本的标签文本和其他UI细节因版本而异)。

异常情况:截至2020年10月8日,发布的R版“Android TV”系统映像将无法以root身份运行。 解决方法:改用发布的Q版(API级别29)Android TV系统映像。

测试:启动模拟器,然后运行adb root。它应该会显示:

  • restarting adbd as root

或者

  • adbd is already running as root

而不是

  • adbd cannot run as root in production builds

备用测试:运行adb shell,如果提示符以$结尾,请运行su。它应该会显示#提示符。

步骤:安装和使用可以作为root身份运行的模拟器映像:

  1. 在Android Studio中,使用菜单命令工具 > AVD Manager
  2. 单击+创建虚拟设备...按钮。
  3. 选择虚拟硬件,然后单击下一步
  4. 选择一个系统映像。
    • 选择任何未在目标列中标有“(Google Play)”的映像。
    • 如果您依赖于Google API(Google登录,Google Fit等),请选择带有“(Google APIs)”标记的映像。
    • 您可能需要从“推荐”组切换到“x86 Images”或“Other Images”组来查找映像。
  5. 如有必要,请单击下载按钮。
  6. 完成新AVD的创建。
  • 提示:将AVD名称以API级别数字开头,这样虚拟设备列表将按API级别排序。
  • 启动新的AVD。(可以在AVD窗口中单击绿色“播放”三角形。)
  • [此贡献归功于@Merk,但应该发布为答案而不是评论。]


    17
    "su" 给我返回 "su: not found"。 - Chad Bingham
    2
    我如何安装Google APIs Intel x86 Atom System Image? - Roni Castro
    2
    @RoniCastro 我添加了执行此操作的步骤。 - Jerry101
    1
    谢谢,伙计。我在sqlite调试方面一直没有进展,但是旧的系统镜像(如intel x86)可以在模拟器调试中使用。我不得不使用命令“adb root”以root身份重新启动adb,以便访问根文件夹。 - Saravana Kumar K R
    1
    @Darkmike,当前的Release R Android TV系统镜像无法以root身份运行,因此请使用Release Q(API级别29)Android TV系统镜像。 - Jerry101
    显示剩余7条评论

    12

    如果您想获取 root 访问权限,那么您正在使用错误的模拟器映像。正如错误消息所述,在 生产 构建中不允许使用 root,而应改用 userdebug 构建。


    1
    我刚刚从Android Studio菜单中创建了一个模拟器,就像以前一样。 - guness
    也许不完全像以前那样,尝试使用没有Google API的图像。 - Diego Torres Milano
    调试版本也包含Google API。 - guness
    25
    在“选择系统映像页面”上,您需要从第二个选项卡中选择一个“Android X.X(Google API)”映像,而不是默认选择的第一个选项卡中的“Android X.X(GooglePlay)”映像。 - Merk
    使用在VS2019中打包的Xamarin的Android设备监视器,您必须取消选中“Google APIs”和“Google Play Store”(没有标签),然后adb root才能正常工作。 - Alex Strickland
    5
    @Merk:我想在模拟器中运行Play Store,并希望root权限能够正常工作以进行研究。有没有解决方案?目前,我唯一的解决方案是使用一个具有Play Store的已root设备。 - node_analyser

    3

    请前往工具 -> SDK 管理器 -> Android SDK -- 现在 在第一个选项卡(SDK 平台)中,首先“选择”在页面底部显示包详细信息。 现在选择“Google API Intel x86 Atom 系统镜像”,取消选择“Google Play Intel x86 Atom 系统镜像”。 此模拟器不会显示“adbd 无法在生产构建中以 root 身份运行”的错误。 Google API 没有 Play Store 应用程序,只有 Play 服务。


    3
    有没有办法在模拟器中同时拥有Play Store和Root权限?我尝试将Play Store(com.android.vending)安装到带有Google API镜像的模拟器中,但没有成功。 - node_analyser

    1
    我遇到了这样的问题,因为在build.gradle文件中默认设置为release构建模式。该模式不允许作为root与虚拟设备通信。必须启用调试模式。
    buildTypes {
          release {
             signingConfig signingConfigs.debug
          }
    }
    

    改为中文:

    变成

    buildTypes {
        debug{
            debuggable true
        }
    }
    

    然后在AVD管理器中,我删除并重新创建了一个新的虚拟设备。重启后一切正常,获得了root访问权限。

    错误信息“adbd cannot run as root in production builds”实际上应该说“...在Android的生产构建中”。制作一个调试AVD(Android虚拟设备)是解决方法。制作您的应用程序的生产构建是无关紧要的。 - Jerry101

    0

    我遇到了同样的问题并通过以下步骤解决:

    第一步:进入工具 =》 Android =》 SDK管理器 =》 Android SDK -- 在(SDK平台)中选择“Google APIs Intel x86 Atom系统镜像”,不要选择“Google Play Intel x86 Atom系统镜像”。

    第二步:创建一个新的模拟器,“不要选择Google Play商店”。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接