OSDN Git Service

Accept UserHandle.USER_ALL during profile preparation
authorCalin Juravle <calin@google.com>
Wed, 24 Jan 2018 22:43:24 +0000 (14:43 -0800)
committerCalin Juravle <calin@google.com>
Wed, 24 Jan 2018 22:56:34 +0000 (14:56 -0800)
Test: adb install foo.apk
Bug: 72453027
Change-Id: I840d70d47a256c8853bbe1b9b023f51bdd5ddf6b

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

index a73ad8d..299c59a 100644 (file)
@@ -17022,7 +17022,7 @@ Slog.e("TODD",
         // Prepare the application profiles for the new code paths.
         // This needs to be done before invoking dexopt so that any install-time profile
         // can be used for optimizations.
-        mArtManagerService.prepareAppProfiles(pkg, args.user.getIdentifier());
+        mArtManagerService.prepareAppProfiles(pkg, resolveUserIds(args.user.getIdentifier()));
 
         // Check whether we need to dexopt the app.
         //
index 92d159b..8178689 100644 (file)
@@ -245,6 +245,14 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub {
      */
     public void prepareAppProfiles(PackageParser.Package pkg, @UserIdInt int user) {
         final int appId = UserHandle.getAppId(pkg.applicationInfo.uid);
+        if (user < 0) {
+            Slog.wtf(TAG, "Invalid user id: " + user);
+            return;
+        }
+        if (appId < 0) {
+            Slog.wtf(TAG, "Invalid app id: " + appId);
+            return;
+        }
         try {
             ArrayMap<String, String> codePathsProfileNames = getPackageProfileNames(pkg);
             for (int i = codePathsProfileNames.size() - 1; i >= 0; i--) {
@@ -267,6 +275,15 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub {
     }
 
     /**
+     * Prepares the app profiles for a set of users. {@see ArtManagerService#prepareAppProfiles}.
+     */
+    public void prepareAppProfiles(PackageParser.Package pkg, int[] user) {
+        for (int i = 0; i < user.length; i++) {
+            prepareAppProfiles(pkg, user[i]);
+        }
+    }
+
+    /**
      * Build the profiles names for all the package code paths (excluding resource only paths).
      * Return the map [code path -> profile name].
      */