即使选择了“ debug”构建变体,“ adbd也无法在生产构建中作为root运行”?

时间:2018-12-07 17:58:51

标签: android android-emulator adb root

我正在尝试将Android仿真器指向本地VM,为此我需要adb root。但是,出现此错误:

$ adb root
adbd cannot run as root in production builds

但是我正在运行的p2p-app的构建版本是debug

enter image description here

build.gradle模块的p2p-app包括以下内容:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            debuggable false
            signingConfig signingConfigs.release
        }

        debug {
            testCoverageEnabled = true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            debuggable true
            versionNameSuffix '-' + gitBranchName()
            applicationIdSuffix '.fifa'
            ext.betaDistributionReleaseNotesFilePath = "fabric-changelog.txt"
            ext.betaDistributionGroupAliases = "android-engineers"

        }
    }
}

由于debug变体具有debuggable true,我希望可以对仿真器进行root访问吗?

2 个答案:

答案 0 :(得分:3)

ADB root is not working on emulator之后,我设法通过从 Google APIs 系统映像而不是 Google Play 一个系统映像创建一个模拟器来克服此限制(请参见下面的屏幕截图) )。

enter image description here

有了这个模拟器,我就能adb root

$ adb root
restarting adbd as root

答案 1 :(得分:2)

adb root shell 命令与任何应用程序的构建变体无关。该命令仅尝试在具有root权限的目标设备上重新启动adbdd代表守护程序)。设备(仿真器)映像的构建配置可以授予这些权限。

对于 Android 仿真器配置,无法授予root权限。而且,由于adbd和仿真器的shell都比普通设备(又称为非根用户)具有更高的特权,因此完全是多余的。

此外,here还提供了关于备用设备和仿真器之间差异的非常小的额外解释。