summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/pm/PackageManager.java1
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java15
2 files changed, 16 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 6a5e6ca289b3..e107ede6edce 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -180,6 +180,7 @@ public abstract class PackageManager {
GET_DISABLED_UNTIL_USED_COMPONENTS,
GET_UNINSTALLED_PACKAGES,
MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS,
+ MATCH_APEX,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ApplicationInfoFlags {}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 90ca83e0770f..4f100cc2c1b3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4944,6 +4944,21 @@ public class PackageManagerService extends IPackageManager.Stub
}
return ai;
}
+ if ((flags & PackageManager.MATCH_APEX) != 0) {
+ // For APKs, PackageInfo.applicationInfo is not exactly the same as ApplicationInfo
+ // returned from getApplicationInfo, but for APEX packages difference shouldn't be
+ // very big.
+ // TODO(b/155328545): generate proper application info for APEXes as well.
+ int apexFlags = ApexManager.MATCH_ACTIVE_PACKAGE;
+ if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {
+ apexFlags = ApexManager.MATCH_FACTORY_PACKAGE;
+ }
+ final PackageInfo pi = mApexManager.getPackageInfo(packageName, apexFlags);
+ if (pi == null) {
+ return null;
+ }
+ return pi.applicationInfo;
+ }
if ("android".equals(packageName)||"system".equals(packageName)) {
return mAndroidApplication;
}