diff options
author | Dianne Hackborn <hackbod@google.com> | 2017-02-28 17:37:35 -0800 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2017-03-01 12:40:57 -0800 |
commit | cd154e95353e7af11314d2339500d6c7f85e181a (patch) | |
tree | 4e04c20b2ff5fde52da63511ba1a68a96ab6835b /tools/aapt/Command.cpp | |
parent | eb422ead0cd7101855db4bff50cb71321cee2377 (diff) |
Implement issue #34842682: Add ability to limit permissions based on features
Two new attributes for <uses-permission>: android:requiredFeature and
android:requiredNotFeature.
Also update aapt to include this information in badging:
uses-permission: name='android.content.cts.REQUIRED_NOT_FEATURE_UNDEFINED' requiredNotFeature='android.software.cts.undefined'
uses-permission: name='android.content.cts.REQUIRED_MULTI_DENY' requiredFeature='android.software.cts.undefined' requiredNotFeature='android.software.cts'
Test: new PermissionFeatureTest suite.
Change-Id: Icc1f815a4675ae9dd2cb7f61730ab28b5c11228a
Diffstat (limited to 'tools/aapt/Command.cpp')
-rw-r--r-- | tools/aapt/Command.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index 0e031e74dd2f..15648bdd1b3b 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -309,6 +309,8 @@ enum { CATEGORY_ATTR = 0x010103e8, BANNER_ATTR = 0x10103f2, ISGAME_ATTR = 0x10103f4, + REQUIRED_FEATURE_ATTR = 0x1010557, + REQUIRED_NOT_FEATURE_ATTR = 0x1010558, }; String8 getComponentName(String8 &pkgName, String8 &componentName) { @@ -366,11 +368,19 @@ static void printCompatibleScreens(ResXMLTree& tree, String8* outError) { printf("\n"); } -static void printUsesPermission(const String8& name, bool optional=false, int maxSdkVersion=-1) { +static void printUsesPermission(const String8& name, bool optional=false, int maxSdkVersion=-1, + const String8& requiredFeature = String8::empty(), + const String8& requiredNotFeature = String8::empty()) { printf("uses-permission: name='%s'", ResTable::normalizeForOutput(name.string()).string()); if (maxSdkVersion != -1) { printf(" maxSdkVersion='%d'", maxSdkVersion); } + if (requiredFeature.length() > 0) { + printf(" requiredFeature='%s'", requiredFeature.string()); + } + if (requiredNotFeature.length() > 0) { + printf(" requiredNotFeature='%s'", requiredNotFeature.string()); + } printf("\n"); if (optional) { @@ -1545,6 +1555,10 @@ int doDump(Bundle* bundle) const int32_t maxSdkVersion = AaptXml::getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR, -1); + const String8 requiredFeature = AaptXml::getAttribute(tree, + REQUIRED_FEATURE_ATTR, &error); + const String8 requiredNotFeature = AaptXml::getAttribute(tree, + REQUIRED_NOT_FEATURE_ATTR, &error); if (name == "android.permission.WRITE_EXTERNAL_STORAGE") { hasWriteExternalStoragePermission = true; @@ -1565,7 +1579,7 @@ int doDump(Bundle* bundle) printUsesPermission(name, AaptXml::getIntegerAttribute(tree, REQUIRED_ATTR, 1) == 0, - maxSdkVersion); + maxSdkVersion, requiredFeature, requiredNotFeature); } else if (tag == "uses-permission-sdk-23" || tag == "uses-permission-sdk-m") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); |