diff options
Diffstat (limited to 'android/content/pm/ApplicationInfo.java')
-rw-r--r-- | android/content/pm/ApplicationInfo.java | 113 |
1 files changed, 104 insertions, 9 deletions
diff --git a/android/content/pm/ApplicationInfo.java b/android/content/pm/ApplicationInfo.java index 746a0902..e85058df 100644 --- a/android/content/pm/ApplicationInfo.java +++ b/android/content/pm/ApplicationInfo.java @@ -37,6 +37,7 @@ import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import com.android.internal.util.ArrayUtils; +import com.android.server.SystemConfig; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -602,6 +603,13 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public static final int PRIVATE_FLAG_VENDOR = 1 << 18; + /** + * Value for {@linl #privateFlags}: whether this app is pre-installed on the + * product partition of the system image. + * @hide + */ + public static final int PRIVATE_FLAG_PRODUCT = 1 << 19; + /** @hide */ @IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = { PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE, @@ -619,6 +627,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { PRIVATE_FLAG_OEM, PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE, PRIVATE_FLAG_PRIVILEGED, + PRIVATE_FLAG_PRODUCT, PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER, PRIVATE_FLAG_STATIC_SHARED_LIBRARY, PRIVATE_FLAG_VENDOR, @@ -754,15 +763,13 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public String[] resourceDirs; /** - * String retrieved from the seinfo tag found in selinux policy. This value - * can be overridden with a value set through the mac_permissions.xml policy - * construct. This value is useful in setting an SELinux security context on - * the process as well as its data directory. The String default is being used - * here to represent a catchall label when no policy matches. + * String retrieved from the seinfo tag found in selinux policy. This value can be set through + * the mac_permissions.xml policy construct. This value is used for setting an SELinux security + * context on the process as well as its data directory. * * {@hide} */ - public String seInfo = "default"; + public String seInfo; /** * The seinfo tag generated per-user. This value may change based upon the @@ -950,6 +957,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * Version of the sandbox the application wants to run in. * @hide */ + @SystemApi public int targetSandboxVersion; /** @@ -1093,6 +1101,58 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** @hide */ public String[] splitClassLoaderNames; + /** + * Represents the default policy. The actual policy used will depend on other properties of + * the application, e.g. the target SDK version. + * @hide + */ + public static final int HIDDEN_API_ENFORCEMENT_DEFAULT = -1; + /** + * No API enforcement; the app can access the entire internal private API. Only for use by + * system apps. + * @hide + */ + public static final int HIDDEN_API_ENFORCEMENT_NONE = 0; + /** + * Light grey list enforcement, the strictest option. Enforces the light grey, dark grey and + * black lists. + * @hide + * */ + public static final int HIDDEN_API_ENFORCEMENT_ALL_LISTS = 1; + /** + * Dark grey list enforcement. Enforces the dark grey and black lists + * @hide + */ + public static final int HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK = 2; + /** + * Blacklist enforcement only. + * @hide + */ + public static final int HIDDEN_API_ENFORCEMENT_BLACK = 3; + + private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_BLACK; + + /** + * Values in this IntDef MUST be kept in sync with enum hiddenapi::EnforcementPolicy in + * art/runtime/hidden_api.h + * @hide + */ + @IntDef(prefix = { "HIDDEN_API_ENFORCEMENT_" }, value = { + HIDDEN_API_ENFORCEMENT_DEFAULT, + HIDDEN_API_ENFORCEMENT_NONE, + HIDDEN_API_ENFORCEMENT_ALL_LISTS, + HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK, + HIDDEN_API_ENFORCEMENT_BLACK, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface HiddenApiEnforcementPolicy {} + + private boolean isValidHiddenApiEnforcementPolicy(int policy) { + return policy >= HIDDEN_API_ENFORCEMENT_DEFAULT && policy <= HIDDEN_API_ENFORCEMENT_MAX; + } + + private int mHiddenApiPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT; + public void dump(Printer pw, String prefix) { dump(pw, prefix, DUMP_FLAG_ALL); } @@ -1180,6 +1240,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { if (category != CATEGORY_UNDEFINED) { pw.println(prefix + "category=" + category); } + pw.println(prefix + "HiddenApiEnforcementPolicy=" + getHiddenApiEnforcementPolicy()); } super.dumpBack(pw, prefix); } @@ -1375,6 +1436,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { classLoaderName = orig.classLoaderName; splitClassLoaderNames = orig.splitClassLoaderNames; appComponentFactory = orig.appComponentFactory; + compileSdkVersion = orig.compileSdkVersion; + compileSdkVersionCodename = orig.compileSdkVersionCodename; + mHiddenApiPolicy = orig.mHiddenApiPolicy; } public String toString() { @@ -1448,6 +1512,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(compileSdkVersion); dest.writeString(compileSdkVersionCodename); dest.writeString(appComponentFactory); + dest.writeInt(mHiddenApiPolicy); } public static final Parcelable.Creator<ApplicationInfo> CREATOR @@ -1518,6 +1583,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { compileSdkVersion = source.readInt(); compileSdkVersionCodename = source.readString(); appComponentFactory = source.readString(); + mHiddenApiPolicy = source.readInt(); } /** @@ -1588,11 +1654,31 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { } } + private boolean isPackageWhitelistedForHiddenApis() { + return SystemConfig.getInstance().getHiddenApiWhitelistedApps().contains(packageName); + } + + /** + * @hide + */ + public @HiddenApiEnforcementPolicy int getHiddenApiEnforcementPolicy() { + if (mHiddenApiPolicy != HIDDEN_API_ENFORCEMENT_DEFAULT) { + return mHiddenApiPolicy; + } + if (isPackageWhitelistedForHiddenApis() && (isSystemApp() || isUpdatedSystemApp())) { + return HIDDEN_API_ENFORCEMENT_NONE; + } + return HIDDEN_API_ENFORCEMENT_BLACK; + } + /** * @hide */ - public boolean isAllowedToUseHiddenApi() { - return isSystemApp(); + public void setHiddenApiEnforcementPolicy(@HiddenApiEnforcementPolicy int policy) { + if (!isValidHiddenApiEnforcementPolicy(policy)) { + throw new IllegalArgumentException("Invalid API enforcement policy: " + policy); + } + mHiddenApiPolicy = policy; } /** @@ -1647,7 +1733,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0; } - /** @hide */ + /** + * True if the application is installed as an instant app. + * @hide + */ + @SystemApi public boolean isInstantApp() { return (privateFlags & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0; } @@ -1699,6 +1789,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (privateFlags & ApplicationInfo.PRIVATE_FLAG_VENDOR) != 0; } + /** @hide */ + public boolean isProduct() { + return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PRODUCT) != 0; + } + /** * Returns whether or not this application was installed as a virtual preload. */ |