Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0700fb61 authored by Liana Kazanova (xWF)'s avatar Liana Kazanova (xWF) Committed by Android (Google) Code Review
Browse files

Merge "Revert "Code refactoring: Move doRename out of preparePackageLI"" into main

parents 50703ffd e40dcd9e
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -3025,7 +3025,6 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal,
    @Override
    @Override
    public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) {
    public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) {
        this.splitCodePaths = splitCodePaths;
        this.splitCodePaths = splitCodePaths;
        this.mSplits = null; // reset for paths changed
        if (splitCodePaths != null) {
        if (splitCodePaths != null) {
            int size = splitCodePaths.length;
            int size = splitCodePaths.length;
            for (int index = 0; index < size; index++) {
            for (int index = 0; index < size; index++) {
+29 −58
Original line number Original line Diff line number Diff line
@@ -1019,9 +1019,7 @@ final class InstallPackageHelper {
                    && scanInstallPackages(requests, createdAppId, versionInfos)) {
                    && scanInstallPackages(requests, createdAppId, versionInfos)) {
                List<ReconciledPackage> reconciledPackages =
                List<ReconciledPackage> reconciledPackages =
                        reconcileInstallPackages(requests, versionInfos);
                        reconcileInstallPackages(requests, versionInfos);
                if (reconciledPackages != null
                if (reconciledPackages != null && commitInstallPackages(reconciledPackages)) {
                        && renameAndUpdatePaths(requests)
                        && commitInstallPackages(reconciledPackages)) {
                    success = true;
                    success = true;
                }
                }
            }
            }
@@ -1031,40 +1029,14 @@ final class InstallPackageHelper {
        }
        }
    }
    }


    private boolean renameAndUpdatePaths(List<InstallRequest> requests) {
        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);
                    return false;
                }

                // 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) {
    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) {
            for (InstallRequest request : requests) {
                try {
                try {
                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "preparePackage");
                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "preparePackage");
                    request.onPrepareStarted();
                    request.onPrepareStarted();
                preparePackage(request);
                    preparePackageLI(request);
                } catch (PrepareFailure prepareFailure) {
                } catch (PrepareFailure prepareFailure) {
                    request.setError(prepareFailure.error,
                    request.setError(prepareFailure.error,
                            prepareFailure.getMessage());
                            prepareFailure.getMessage());
@@ -1076,6 +1048,7 @@ final class InstallPackageHelper {
                    Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
                    Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
                }
                }
            }
            }
        }
        return true;
        return true;
    }
    }


@@ -1258,7 +1231,8 @@ final class InstallPackageHelper {
        return newProp != null && newProp.getBoolean();
        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[] allUsers =  mPm.mUserManager.getUserIds();
        final int installFlags = request.getInstallFlags();
        final int installFlags = request.getInstallFlags();
        final boolean onExternal = request.getVolumeUuid() != null;
        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
            // Use the path returned by apexd
            parsedPackage.setPath(request.getApexInfo().modulePath);
            parsedPackage.setPath(request.getApexInfo().modulePath);
            parsedPackage.setBaseApkPath(request.getApexInfo().modulePath);
            parsedPackage.setBaseApkPath(request.getApexInfo().modulePath);
@@ -2107,21 +2092,7 @@ final class InstallPackageHelper {


        // Reflect the rename in scanned details
        // Reflect the rename in scanned details
        try {
        try {
            String afterCanonicalPath = afterCodeFile.getCanonicalPath();
            parsedPackage.setPath(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));
            }
        } catch (IOException e) {
        } catch (IOException e) {
            Slog.e(TAG, "Failed to get path: " + afterCodeFile, e);
            Slog.e(TAG, "Failed to get path: " + afterCodeFile, e);
            throw new PrepareFailure(PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE,
            throw new PrepareFailure(PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE,