diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-05-14 00:42:12 +0200 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-05-14 00:42:12 +0200 |
commit | 35b72beaf36b851275b86f4c16de414ce6f8a15a (patch) | |
tree | ac504cb7b03cd61ef0b5312c99427f8678c95ead /install | |
parent | Snap for 6465939 from 94abf26ba2ae26a37b44a4de4cc949bbf26f762e to mainline-release (diff) | |
parent | Merge changes from topic "nonab_on_vab_r" into rvc-dev am: b62ff1abe3 (diff) | |
download | android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar.gz android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar.bz2 android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar.lz android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar.xz android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.tar.zst android_bootable_recovery-35b72beaf36b851275b86f4c16de414ce6f8a15a.zip |
Diffstat (limited to '')
-rw-r--r-- | install/install.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/install/install.cpp b/install/install.cpp index 1c9bf2fd2..d404997dc 100644 --- a/install/install.cpp +++ b/install/install.cpp @@ -331,15 +331,25 @@ static InstallResult TryUpdateBinary(Package* package, bool* wipe_cache, return INSTALL_CORRUPT; } - bool is_ab = android::base::GetBoolProperty("ro.build.ab_update", false); - if (is_ab) { + bool package_is_ab = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::AB); + bool device_supports_ab = android::base::GetBoolProperty("ro.build.ab_update", false); + bool ab_device_supports_nonab = + android::base::GetBoolProperty("ro.virtual_ab.allow_non_ab", false); + bool device_only_supports_ab = device_supports_ab && !ab_device_supports_nonab; + + if (package_is_ab) { CHECK(package->GetType() == PackageType::kFile); } - // Verify against the metadata in the package first. - if (is_ab && !CheckPackageMetadata(metadata, OtaType::AB)) { - log_buffer->push_back(android::base::StringPrintf("error: %d", kUpdateBinaryCommandFailure)); - return INSTALL_ERROR; + // Verify against the metadata in the package first. Expects A/B metadata if: + // Package declares itself as an A/B package + // Package does not declare itself as an A/B package, but device only supports A/B; + // still calls CheckPackageMetadata to get a meaningful error message. + if (package_is_ab || device_only_supports_ab) { + if (!CheckPackageMetadata(metadata, OtaType::AB)) { + log_buffer->push_back(android::base::StringPrintf("error: %d", kUpdateBinaryCommandFailure)); + return INSTALL_ERROR; + } } ReadSourceTargetBuild(metadata, log_buffer); @@ -389,8 +399,9 @@ static InstallResult TryUpdateBinary(Package* package, bool* wipe_cache, std::vector<std::string> args; if (auto setup_result = - is_ab ? SetUpAbUpdateCommands(package_path, zip, pipe_write.get(), &args) - : SetUpNonAbUpdateCommands(package_path, zip, retry_count, pipe_write.get(), &args); + package_is_ab + ? SetUpAbUpdateCommands(package_path, zip, pipe_write.get(), &args) + : SetUpNonAbUpdateCommands(package_path, zip, retry_count, pipe_write.get(), &args); !setup_result) { log_buffer->push_back(android::base::StringPrintf("error: %d", kUpdateBinaryCommandFailure)); return INSTALL_CORRUPT; |