From 1d643dabe543f3f1b7d96485d6317eece7836a4e Mon Sep 17 00:00:00 2001 From: Jeff Hao Date: Tue, 28 Mar 2017 15:24:14 -0700 Subject: [PATCH] Fix PackageManagerService passing usesLibraryFiles to dexOpt. The shared libraries for the package need to be updated before calling performDexOpt so that they can be populated and passed down to dexOpt. This isn't missing in the AOSP version, so the fix is only for master. Bug: 36698836 Test: cts-tradefed run singleCommand cts -d --module CtsAppSecurityHostTestCases -t android.appsecurity.cts.UsesLibraryHostTest Change-Id: Id58bd50a13e5115af03c9167d4eb7f4b1d1dc9da --- .../com/android/server/pm/PackageManagerService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 621e37b58d6d4..ce53dae1fc107 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -16921,6 +16921,15 @@ public class PackageManagerService extends IPackageManager.Stub { return; } + // Shared libraries for the package need to be updated. + synchronized (mPackages) { + try { + updateSharedLibrariesLPr(pkg, null); + } catch (PackageManagerException e) { + Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage()); + } + } + Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); // Do not run PackageDexOptimizer through the local performDexOpt // method because `pkg` may not be in `mPackages` yet. @@ -16969,6 +16978,7 @@ public class PackageManagerService extends IPackageManager.Stub { args.user, installerPackageName, volumeUuid, res, args.installReason); } } + synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(pkgName); if (ps != null) {