diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-11 19:35:36 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-11 19:35:36 +0000 |
commit | 8c0abadce68e94f29051da30fdf4cdc502f5d05a (patch) | |
tree | cee4020fc34158ef6ca91f725dcc9ab0b4018a8f | |
parent | ea1e6258813bf0a6a5e89a9df45df0fcad95c759 (diff) | |
parent | eebaa1377c05822c50cd82fb41357aa0740db422 (diff) | |
download | base-8c0abadce68e94f29051da30fdf4cdc502f5d05a.tar.gz |
Merge cherrypicks of [20438552] into sparse-9161281-L20900000957320148.
Change-Id: I4d9834690f341dd0a1a0cbf74b32cf2917012eca
-rw-r--r-- | core/res/res/values/attrs_manifest.xml | 15 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java | 24 | ||||
-rw-r--r-- | tools/aapt2/link/ManifestFixer.cpp | 1 |
3 files changed, 36 insertions, 4 deletions
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 7562b9aa0ead..a62f6ad4681a 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -3602,4 +3602,19 @@ false, the application cannot be profiled at all. Defaults to true. --> <attr name="enabled" format="boolean" /> </declare-styleable> + + <!-- <code>install-constraints</code> tag rejects installs unless one the constraints defined by + its child elements is true. + It is possible to have multiple <code>install-constraints</code> tags in a single manifest, + where each tag is evaluated independently. + @hide --> + <declare-styleable name="AndroidManifestInstallConstraints" parent="AndroidManifest" /> + + <!-- A constraint for <code>install-constraints</code>. Checks that the device fingerprint + starts with the given prefix. + @hide --> + <declare-styleable name="AndroidManifestInstallConstraintsFingerprintPrefix" + parent="AndroidManifestInstallConstraints"> + <attr name="value" /> + </declare-styleable> </resources> diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index 9bfb40fe11f7..d8945eddc86b 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -169,9 +169,11 @@ public class ParsingPackageUtils { public static final String TAG_ADOPT_PERMISSIONS = "adopt-permissions"; public static final String TAG_APPLICATION = "application"; + public static final String TAG_ATTRIBUTION = "attribution"; public static final String TAG_COMPATIBLE_SCREENS = "compatible-screens"; public static final String TAG_EAT_COMMENT = "eat-comment"; public static final String TAG_FEATURE_GROUP = "feature-group"; + public static final String TAG_INSTALL_CONSTRAINTS = "install-constraints"; public static final String TAG_INSTRUMENTATION = "instrumentation"; public static final String TAG_KEY_SETS = "key-sets"; public static final String TAG_MANIFEST = "manifest"; @@ -179,15 +181,16 @@ public class ParsingPackageUtils { public static final String TAG_OVERLAY = "overlay"; public static final String TAG_PACKAGE = "package"; public static final String TAG_PACKAGE_VERIFIER = "package-verifier"; - public static final String TAG_ATTRIBUTION = "attribution"; public static final String TAG_PERMISSION = "permission"; public static final String TAG_PERMISSION_GROUP = "permission-group"; public static final String TAG_PERMISSION_TREE = "permission-tree"; + public static final String TAG_PROFILEABLE = "profileable"; public static final String TAG_PROTECTED_BROADCAST = "protected-broadcast"; public static final String TAG_QUERIES = "queries"; + public static final String TAG_RECEIVER = "receiver"; public static final String TAG_RESTRICT_UPDATE = "restrict-update"; - public static final String TAG_SUPPORT_SCREENS = "supports-screens"; public static final String TAG_SUPPORTS_INPUT = "supports-input"; + public static final String TAG_SUPPORT_SCREENS = "supports-screens"; public static final String TAG_USES_CONFIGURATION = "uses-configuration"; public static final String TAG_USES_FEATURE = "uses-feature"; public static final String TAG_USES_GL_TEXTURE = "uses-gl-texture"; @@ -196,8 +199,6 @@ public class ParsingPackageUtils { public static final String TAG_USES_PERMISSION_SDK_M = "uses-permission-sdk-m"; public static final String TAG_USES_SDK = "uses-sdk"; public static final String TAG_USES_SPLIT = "uses-split"; - public static final String TAG_PROFILEABLE = "profileable"; - public static final String TAG_RECEIVER = "receiver"; public static final String METADATA_MAX_ASPECT_RATIO = "android.max_aspect"; public static final String METADATA_SUPPORTS_SIZE_CHANGES = "android.supports_size_changes"; @@ -1040,6 +1041,8 @@ public class ParsingPackageUtils { return input.success(pkg); case TAG_RESTRICT_UPDATE: return parseRestrictUpdateHash(flags, input, pkg, res, parser); + case TAG_INSTALL_CONSTRAINTS: + return parseInstallConstraints(input, pkg, res, parser); case TAG_QUERIES: return parseQueries(input, pkg, res, parser); default: @@ -1729,6 +1732,19 @@ public class ParsingPackageUtils { return input.success(pkg); } + private static ParseResult<ParsingPackage> parseInstallConstraints( + ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser) + throws IOException, XmlPullParserException { + final int depth = parser.getDepth(); + int type; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG + || parser.getDepth() > depth)) { + // TODO(b/232475788): call input.skip if constraints check fails + } + return input.success(pkg); + } + private static ParseResult<ParsingPackage> parseQueries(ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser) throws IOException, XmlPullParserException { final int depth = parser.getDepth(); diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp index d432341a8cde..948b11b6795e 100644 --- a/tools/aapt2/link/ManifestFixer.cpp +++ b/tools/aapt2/link/ManifestFixer.cpp @@ -477,6 +477,7 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, manifest_action["compatible-screens"]["screen"]; manifest_action["supports-gl-texture"]; manifest_action["restrict-update"]; + manifest_action["install-constraints"]["fingerprint-prefix"]; manifest_action["package-verifier"]; manifest_action["meta-data"] = meta_data_action; manifest_action["uses-split"].Action(RequiredNameIsJavaPackage); |