diff options
| author | 2023-10-11 18:15:17 +0000 | |
|---|---|---|
| committer | 2023-10-11 18:15:17 +0000 | |
| commit | 6c784f0449ac114da4ba57b53338c5d967813d68 (patch) | |
| tree | dc42656cbce13626093be8645b60069f5c09d9e7 | |
| parent | dc97261018df5465f7c58e625bb5e41077b54ef5 (diff) | |
| parent | 91682aad95add063faadc97e8d88c4cddfd653f9 (diff) | |
Merge "[Bugfix]use walkFileTree to calucate apk size" into main am: cd1e48e97f am: 0674a81d70 am: 91682aad95
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2777290
Change-Id: I1e3524f102d698ef1b9d8a0769ed28b6be7001bd
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageMetrics.java | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/pm/PackageMetrics.java b/services/core/java/com/android/server/pm/PackageMetrics.java index 80d6ebbd90b3..85e11d66737a 100644 --- a/services/core/java/com/android/server/pm/PackageMetrics.java +++ b/services/core/java/com/android/server/pm/PackageMetrics.java @@ -34,8 +34,11 @@ import java.io.File; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Stream; @@ -155,10 +158,27 @@ final class PackageMetrics { private long getApksSize(File apkDir) { // TODO(b/249294752): also count apk sizes for failed installs final AtomicLong apksSize = new AtomicLong(); - try (Stream<Path> walkStream = Files.walk(apkDir.toPath())) { - walkStream.filter(p -> p.toFile().isFile() - && ApkLiteParseUtils.isApkFile(p.toFile())).forEach( - f -> apksSize.addAndGet(f.toFile().length())); + try { + Files.walkFileTree(apkDir.toPath(), new SimpleFileVisitor<>() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) + throws IOException { + if (dir.equals(apkDir.toPath())) { + return FileVisitResult.CONTINUE; + } else { + return FileVisitResult.SKIP_SUBTREE; + } + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + if (file.toFile().isFile() && ApkLiteParseUtils.isApkFile(file.toFile())) { + apksSize.addAndGet(file.toFile().length()); + } + return FileVisitResult.CONTINUE; + } + }); } catch (IOException e) { // ignore } |