Loading core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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++) { Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +29 −58 Original line number Original line Diff line number Diff line Loading @@ -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; } } } } Loading @@ -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()); Loading @@ -1076,6 +1048,7 @@ final class InstallPackageHelper { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } } } } } return true; return true; } } Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading
core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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++) { Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +29 −58 Original line number Original line Diff line number Diff line Loading @@ -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; } } } } Loading @@ -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()); Loading @@ -1076,6 +1048,7 @@ final class InstallPackageHelper { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } } } } } return true; return true; } } Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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, Loading