在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