From b9656a93aac435cefaa4ca0e1b06495d690ba019 Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Wed, 2 May 2018 10:59:45 +0100 Subject: [PATCH] old paths contains all entries when updating In certains circumstances, only the base and split APKs were included in the "old paths" list when updating the application info. Instead, this list should contain _all_ elements, including any additional libraries that may be added to the overall classpath. Bug: 77342775 Test: Manual. Install a package. Install a split with --dont_kill. See that the path doesn't contain duplicate entries Change-Id: Id9739cce215ab07bff1b17966583c0cf51a0b34a --- core/java/android/app/ActivityThread.java | 4 ++-- .../java/android/content/pm/IPackageManager.aidl | 2 -- .../android/server/pm/PackageManagerService.java | 16 ---------------- 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 037a87b7b54ef..5947c51fc9304 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5333,8 +5333,8 @@ public final class ActivityThread extends ClientTransactionHandler { } } } - final List oldPaths = - sPackageManager.getPreviousCodePaths(packageName); + final ArrayList oldPaths = new ArrayList<>(); + LoadedApk.makePaths(this, pkgInfo.getApplicationInfo(), oldPaths); pkgInfo.updateApplicationInfo(aInfo, oldPaths); } catch (RemoteException e) { } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 2be33e94dc251..c988fa907f867 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -644,8 +644,6 @@ interface IPackageManager { boolean isPackageDeviceAdminOnAnyUser(String packageName); - List getPreviousCodePaths(in String packageName); - int getInstallReason(String packageName, int userId); ParceledListSlice getSharedLibraries(in String packageName, int flags, int userId); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bb1f5c02f8643..05b3809b41aba 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -16403,22 +16403,6 @@ public class PackageManagerService extends IPackageManager.Stub } } - @Override - public List getPreviousCodePaths(String packageName) { - final int callingUid = Binder.getCallingUid(); - final List result = new ArrayList<>(); - if (getInstantAppPackageName(callingUid) != null) { - return result; - } - final PackageSetting ps = mSettings.mPackages.get(packageName); - if (ps != null - && ps.oldCodePaths != null - && !filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) { - result.addAll(ps.oldCodePaths); - } - return result; - } - private void replaceNonSystemPackageLIF(PackageParser.Package deletedPackage, PackageParser.Package pkg, final @ParseFlags int parseFlags, final @ScanFlags int scanFlags, UserHandle user, int[] allUsers,