summaryrefslogtreecommitdiff
path: root/tools/aapt/Command.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt/Command.cpp')
-rw-r--r--tools/aapt/Command.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 2e34197e97aa..0e031e74dd2f 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -393,10 +393,14 @@ static void printUsesPermissionSdk23(const String8& name, int maxSdkVersion=-1)
printf("\n");
}
-static void printUsesImpliedPermission(const String8& name, const String8& reason) {
- printf("uses-implied-permission: name='%s' reason='%s'\n",
- ResTable::normalizeForOutput(name.string()).string(),
- ResTable::normalizeForOutput(reason.string()).string());
+static void printUsesImpliedPermission(const String8& name, const String8& reason,
+ const int32_t maxSdkVersion = -1) {
+ printf("uses-implied-permission: name='%s'",
+ ResTable::normalizeForOutput(name.string()).string());
+ if (maxSdkVersion != -1) {
+ printf(" maxSdkVersion='%d'", maxSdkVersion);
+ }
+ printf(" reason='%s'\n", ResTable::normalizeForOutput(reason.string()).string());
}
Vector<String8> getNfcAidCategories(AssetManager& assets, const String8& xmlPath, bool offHost,
@@ -1027,6 +1031,7 @@ int doDump(Bundle* bundle)
// These two implement the implicit permissions that are granted
// to pre-1.6 applications.
bool hasWriteExternalStoragePermission = false;
+ int32_t writeExternalStoragePermissionMaxSdkVersion = -1;
bool hasReadPhoneStatePermission = false;
// If an app requests write storage, they will also get read storage.
@@ -1538,8 +1543,12 @@ int doDump(Bundle* bundle)
addImpliedFeaturesForPermission(targetSdk, name, &impliedFeatures, false);
+ const int32_t maxSdkVersion =
+ AaptXml::getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR, -1);
+
if (name == "android.permission.WRITE_EXTERNAL_STORAGE") {
hasWriteExternalStoragePermission = true;
+ writeExternalStoragePermissionMaxSdkVersion = maxSdkVersion;
} else if (name == "android.permission.READ_EXTERNAL_STORAGE") {
hasReadExternalStoragePermission = true;
} else if (name == "android.permission.READ_PHONE_STATE") {
@@ -1556,7 +1565,7 @@ int doDump(Bundle* bundle)
printUsesPermission(name,
AaptXml::getIntegerAttribute(tree, REQUIRED_ATTR, 1) == 0,
- AaptXml::getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR));
+ maxSdkVersion);
} else if (tag == "uses-permission-sdk-23" || tag == "uses-permission-sdk-m") {
String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error);
@@ -2039,9 +2048,11 @@ int doDump(Bundle* bundle)
// do this (regardless of target API version) because we can't have
// an app with write permission but not read permission.
if (!hasReadExternalStoragePermission && hasWriteExternalStoragePermission) {
- printUsesPermission(String8("android.permission.READ_EXTERNAL_STORAGE"));
+ printUsesPermission(String8("android.permission.READ_EXTERNAL_STORAGE"),
+ false /* optional */, writeExternalStoragePermissionMaxSdkVersion);
printUsesImpliedPermission(String8("android.permission.READ_EXTERNAL_STORAGE"),
- String8("requested WRITE_EXTERNAL_STORAGE"));
+ String8("requested WRITE_EXTERNAL_STORAGE"),
+ writeExternalStoragePermissionMaxSdkVersion);
}
// Pre-JellyBean call log permission compatibility.