From 83727858ad4892393c290fe74795817703300c5b Mon Sep 17 00:00:00 2001 From: Yurii Zubrytskyi Date: Sat, 18 Apr 2020 20:58:45 -0700 Subject: [PATCH] [incfs] Skip empty folders for app updates The change is to check if there are any files in the source folder before creating target. Bug: 153704006 Bug: 154535403 Test: double adb install megacity.apk without uninstallation Change-Id: Id62fe224f7dce032af4382909986b6ff04508b38 --- .../server/pm/PackageInstallerSession.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 2221644bff47f..6b1ef3acdf610 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -150,7 +150,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; @@ -2099,11 +2098,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { continue; } - mResolvedInstructionSets.add(archSubDir.getName()); - List oatFiles = Arrays.asList(archSubDir.listFiles()); - if (!oatFiles.isEmpty()) { - mResolvedInheritedFiles.addAll(oatFiles); + File[] files = archSubDir.listFiles(); + if (files == null || files.length == 0) { + continue; } + + mResolvedInstructionSets.add(archSubDir.getName()); + mResolvedInheritedFiles.addAll(Arrays.asList(files)); } } } @@ -2117,7 +2118,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (!libDir.exists() || !libDir.isDirectory()) { continue; } - final List libDirsToInherit = new LinkedList<>(); + final List libDirsToInherit = new ArrayList<>(); + final List libFilesToInherit = new ArrayList<>(); for (File archSubDir : libDir.listFiles()) { if (!archSubDir.isDirectory()) { continue; @@ -2129,14 +2131,24 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { Slog.e(TAG, "Skipping linking of native library directory!", e); // shouldn't be possible, but let's avoid inheriting these to be safe libDirsToInherit.clear(); + libFilesToInherit.clear(); break; } - if (!mResolvedNativeLibPaths.contains(relLibPath)) { - mResolvedNativeLibPaths.add(relLibPath); + + File[] files = archSubDir.listFiles(); + if (files == null || files.length == 0) { + continue; } - libDirsToInherit.addAll(Arrays.asList(archSubDir.listFiles())); + + libDirsToInherit.add(relLibPath); + libFilesToInherit.addAll(Arrays.asList(files)); } - mResolvedInheritedFiles.addAll(libDirsToInherit); + for (String subDir : libDirsToInherit) { + if (!mResolvedNativeLibPaths.contains(subDir)) { + mResolvedNativeLibPaths.add(subDir); + } + } + mResolvedInheritedFiles.addAll(libFilesToInherit); } } }