summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Liana Kazanova (xWF) <lkazanova@google.com> 2024-09-09 22:33:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-09 22:33:43 +0000
commit0700fb611c2c0e4b89be6d0a10665fc3b428c19e (patch)
treef7281c4bd0f35f71514978052322312be20cb974
parent50703ffdc286b802c7f6c383969d1b94aa42f8ae (diff)
parente40dcd9ec3527ef1e5c329a6aa5f63798a6e2971 (diff)
Merge "Revert "Code refactoring: Move doRename out of preparePackageLI"" into main
-rw-r--r--core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java1
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java87
2 files changed, 29 insertions, 59 deletions
diff --git a/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java b/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
index 032ac4283712..12d326486e77 100644
--- a/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
+++ b/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
@@ -3025,7 +3025,6 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal,
@Override
public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) {
this.splitCodePaths = splitCodePaths;
- this.mSplits = null; // reset for paths changed
if (splitCodePaths != null) {
int size = splitCodePaths.length;
for (int index = 0; index < size; index++) {
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 2856eb45ebd1..f449126af0f9 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1019,9 +1019,7 @@ final class InstallPackageHelper {
&& scanInstallPackages(requests, createdAppId, versionInfos)) {
List<ReconciledPackage> reconciledPackages =
reconcileInstallPackages(requests, versionInfos);
- if (reconciledPackages != null
- && renameAndUpdatePaths(requests)
- && commitInstallPackages(reconciledPackages)) {
+ if (reconciledPackages != null && commitInstallPackages(reconciledPackages)) {
success = true;
}
}
@@ -1031,49 +1029,24 @@ final class InstallPackageHelper {
}
}
- private boolean renameAndUpdatePaths(List<InstallRequest> requests) {
+ private boolean prepareInstallPackages(List<InstallRequest> requests) {
+ // TODO: will remove the locking after doRename is moved out of prepare
try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) {
for (InstallRequest request : requests) {
- ParsedPackage parsedPackage = request.getParsedPackage();
- final boolean isApex = (request.getScanFlags() & SCAN_AS_APEX) != 0;
- if (isApex) {
- continue;
- }
try {
- doRenameLI(request, parsedPackage);
- setUpFsVerity(parsedPackage);
- } catch (Installer.InstallerException | IOException | DigestException
- | NoSuchAlgorithmException | PrepareFailure e) {
- request.setError(PackageManagerException.INTERNAL_ERROR_VERITY_SETUP,
- "Failed to set up verity: " + e);
+ Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "preparePackage");
+ request.onPrepareStarted();
+ preparePackageLI(request);
+ } catch (PrepareFailure prepareFailure) {
+ request.setError(prepareFailure.error,
+ prepareFailure.getMessage());
+ request.setOriginPackage(prepareFailure.mConflictingPackage);
+ request.setOriginPermission(prepareFailure.mConflictingPermission);
return false;
+ } finally {
+ request.onPrepareFinished();
+ Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
-
- // update paths that are set before renaming
- PackageSetting scannedPackageSetting = request.getScannedPackageSetting();
- scannedPackageSetting.setPath(new File(parsedPackage.getPath()));
- scannedPackageSetting.setLegacyNativeLibraryPath(
- parsedPackage.getNativeLibraryRootDir());
- }
- return true;
- }
- }
-
- private boolean prepareInstallPackages(List<InstallRequest> requests) {
- for (InstallRequest request : requests) {
- try {
- Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "preparePackage");
- request.onPrepareStarted();
- preparePackage(request);
- } catch (PrepareFailure prepareFailure) {
- request.setError(prepareFailure.error,
- prepareFailure.getMessage());
- request.setOriginPackage(prepareFailure.mConflictingPackage);
- request.setOriginPermission(prepareFailure.mConflictingPermission);
- return false;
- } finally {
- request.onPrepareFinished();
- Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
}
return true;
@@ -1258,7 +1231,8 @@ final class InstallPackageHelper {
return newProp != null && newProp.getBoolean();
}
- private void preparePackage(InstallRequest request) throws PrepareFailure {
+ @GuardedBy("mPm.mInstallLock")
+ private void preparePackageLI(InstallRequest request) throws PrepareFailure {
final int[] allUsers = mPm.mUserManager.getUserIds();
final int installFlags = request.getInstallFlags();
final boolean onExternal = request.getVolumeUuid() != null;
@@ -1765,7 +1739,18 @@ final class InstallPackageHelper {
}
}
- if (isApex) {
+ if (!isApex) {
+ doRenameLI(request, parsedPackage);
+
+ try {
+ setUpFsVerity(parsedPackage);
+ } catch (Installer.InstallerException | IOException | DigestException
+ | NoSuchAlgorithmException e) {
+ throw PrepareFailure.ofInternalError(
+ "Failed to set up verity: " + e,
+ PackageManagerException.INTERNAL_ERROR_VERITY_SETUP);
+ }
+ } else {
// Use the path returned by apexd
parsedPackage.setPath(request.getApexInfo().modulePath);
parsedPackage.setBaseApkPath(request.getApexInfo().modulePath);
@@ -2107,21 +2092,7 @@ final class InstallPackageHelper {
// Reflect the rename in scanned details
try {
- String afterCanonicalPath = afterCodeFile.getCanonicalPath();
- String beforeCanonicalPath = beforeCodeFile.getCanonicalPath();
- parsedPackage.setPath(afterCanonicalPath);
-
- parsedPackage.setNativeLibraryDir(
- parsedPackage.getNativeLibraryDir()
- .replace(beforeCanonicalPath, afterCanonicalPath));
- parsedPackage.setNativeLibraryRootDir(
- parsedPackage.getNativeLibraryRootDir()
- .replace(beforeCanonicalPath, afterCanonicalPath));
- String secondaryNativeLibraryDir = parsedPackage.getSecondaryNativeLibraryDir();
- if (secondaryNativeLibraryDir != null) {
- parsedPackage.setSecondaryNativeLibraryDir(
- secondaryNativeLibraryDir.replace(beforeCanonicalPath, afterCanonicalPath));
- }
+ parsedPackage.setPath(afterCodeFile.getCanonicalPath());
} catch (IOException e) {
Slog.e(TAG, "Failed to get path: " + afterCodeFile, e);
throw new PrepareFailure(PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE,