adb disable-verity执行失败的原因

在andrid8.1手机上,执行#adb disable-verity 命令返回如下error信息。
“Error getting verity state”
原因:
执行#adb disable-verity命令 会调用如下函数

void set_verity_enabled_state_service(int fd, void* cookie) {
...
  if (using_avb) {
        // Yep, the system is using AVB.
        AvbOps* ops = avb_ops_user_new();
        if (ops == nullptr) {
            WriteFdFmt(fd, "Error getting AVB ops\n");
            return;
        }
        if (set_avb_verity_enabled_state(fd, ops, enable)) {
            any_changed = true;
        }
...
}

该函数中调用set_avb_verity_enabled_state()

/* Use AVB to turn verity on/off */
static bool set_avb_verity_enabled_state(int fd, AvbOps* ops, bool enable_verity) {
    std::string ab_suffix = get_ab_suffix();

    bool verity_enabled;
    if (!avb_user_verity_get(ops, ab_suffix.c_str(), &verity_enabled)) {
        WriteFdFmt(fd, "Error getting verity state\n");
        return false;
    }

从该函数中返回 "Error getting verity state“这个error信息。

#adb disable-verity 这个指令会修改vbmeta.img这个镜像的部分内容,
但这个镜像是在android8.1上被secure boot功能保护的,一旦镜像发生改变,
将会因vbmeta校验不过导致无法开机。

注意:在android7.0的项目中,执行#adb disable-verity命令并不会调用到set_avb_verity_enabled_state(),所以这个问题在android7.0上并不存在。

关于avb(Android verify boot)的解释,可以参考:
https://android.googlesource.com/platform/external/avb/+/master/README.md

你可能感兴趣的:(技术总结)