diff --git a/frameworks/native/backup_ext/include/ext_backup.h b/frameworks/native/backup_ext/include/ext_backup.h index 2b2ce8740ed03775b35d6a1d2b4341b9fb2d9226..7940adda9a82d7f61a3db79b93b78d544160f52c 100644 --- a/frameworks/native/backup_ext/include/ext_backup.h +++ b/frameworks/native/backup_ext/include/ext_backup.h @@ -127,6 +127,8 @@ public: */ virtual ErrCode OnRestore(void); + bool WasFromSpeicalVersion(void); + public: ExtBackup() = default; ~ExtBackup() override = default; diff --git a/frameworks/native/backup_ext/src/ext_backup.cpp b/frameworks/native/backup_ext/src/ext_backup.cpp index 30ca48335625c97ab119051d354101f6eb72e3a0..568c9309ed6ad5d87bb00f5596d743dd810905a4 100644 --- a/frameworks/native/backup_ext/src/ext_backup.cpp +++ b/frameworks/native/backup_ext/src/ext_backup.cpp @@ -173,8 +173,8 @@ sptr ExtBackup::OnConnect(const AAFwk::Want &want) // async do restore. if (extAction_ == BConstants::ExtensionAction::RESTORE && - restoreType_ == RestoreTypeEnum::RESTORE_DATA_READDY && appVersionCode_ == 0 && - appVersionStr_ == "0.0.0.0") { + restoreType_ == RestoreTypeEnum::RESTORE_DATA_READDY && + WasFromSpeicalVersion()) { HILOGI("Restore directly when upgrading."); remoteObject->AsyncTaskRestoreForUpgrade(); } @@ -209,6 +209,14 @@ void ExtBackup::OnDisconnect(const AAFwk::Want &want) } } +bool ExtBackup::WasFromSpeicalVersion(void) +{ + if (appVersionCode_ == 0 && appVersionStr_ == "0.0.0.0") { + return true; + } + return false; +} + ErrCode ExtBackup::OnBackup(void) { HILOGI("BackupExtensionAbility(base) OnBackup."); diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index 8f43e33839189f73bc6c5b7ea5f25df1ae4bd3ac..b4cfc3e311c985aae865402715e07e3daa783f52 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -333,7 +333,11 @@ int BackupExtExtension::HandleRestore(const string &fileName) string tarName = path + fileName; auto tarballFunc = BTarballFactory::Create("cmdline", tarName); - (tarballFunc->untar)("/"); + if (extension_->WasFromSpeicalVersion()) { + (tarballFunc->untar)(path); + } else { + (tarballFunc->untar)("/"); + } HILOGI("Application recovered successfully, package path is %{public}s", tarName.c_str()); return ERR_OK;