diff options
author | 2024-09-09 22:33:43 +0000 | |
---|---|---|
committer | 2024-09-09 22:33:43 +0000 | |
commit | 0700fb611c2c0e4b89be6d0a10665fc3b428c19e (patch) | |
tree | f7281c4bd0f35f71514978052322312be20cb974 | |
parent | 50703ffdc286b802c7f6c383969d1b94aa42f8ae (diff) | |
parent | e40dcd9ec3527ef1e5c329a6aa5f63798a6e2971 (diff) |
Merge "Revert "Code refactoring: Move doRename out of preparePackageLI"" into main
-rw-r--r-- | core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java | 1 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/InstallPackageHelper.java | 87 |
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, |