From 4cfaa2ebdbd6332803aa5b0c9df17fef69e0df8a 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 Bug: 80337129 Test: Manual. Install a package. Install a split with --dont_kill. See that the path doesn't contain duplicate entries Test: Uninstall GMS updates and reinstall. Verify that GMS Dex files aren't extrated out of the APK. (cherry picked from commit b9656a93aac435cefaa4ca0e1b06495d690ba019) Merged-In: Id9739cce215ab07bff1b17966583c0cf51a0b34a Change-Id: I3c61b1b61dc1ab8a1a51a5be68f19ae9af586692 --- 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 7c5afbac31a06..1b431be5208cd 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5295,8 +5295,8 @@ public final class ActivityThread { } } } - final List oldPaths = - sPackageManager.getPreviousCodePaths(packageName); + final ArrayList oldPaths = new ArrayList<>(); + LoadedApk.makePaths(this, loadedApk.getApplicationInfo(), oldPaths); loadedApk.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 73a403dd41f77..92be900e71ceb 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -648,8 +648,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 864c965af3f6b..d136a55422d26 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -17901,22 +17901,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 int policyFlags, int scanFlags, UserHandle user, int[] allUsers, String installerPackageName, PackageInstalledInfo res,