OSDN Git Service

Fix PackageManagerService passing usesLibraryFiles to dexOpt.
authorJeff Hao <jeffhao@google.com>
Tue, 28 Mar 2017 22:24:14 +0000 (15:24 -0700)
committerJeff Hao <jeffhao@google.com>
Wed, 29 Mar 2017 23:55:19 +0000 (16:55 -0700)
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

services/core/java/com/android/server/pm/PackageManagerService.java

index 621e37b..ce53dae 100644 (file)
@@ -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) {