Android Permissions Demystified. Adrienne Porter Felt and colleagues presented this work at the Conference on Computer and Communications Security in 2011. They asked whether Android apps followed least privilege—requesting only the authority needed by their reachable functionality—and whether incomplete documentation caused unnecessary requests. Android 2.2 did not enforce permissions through one central policy table. Some checks occurred in system services reached through Binder. Others relied on Linux groups for selected resources, Content Providers, or Intent delivery, where one component could ask another to act. The version defined 134 platform permissions. The researchers therefore needed a permission map: a lookup connecting protected operations to the permissions required to perform them. The comparison was narrow. An app counted as overprivileged when it requested a permission that its reachable functionality did not require. That tests declared capability against code, not privacy behavior: it cannot tell whether sensitive data was actually used, transmitted, or justified by the feature shown to the user. The related question was whether confusing names, incomplete guidance, delegation to another app, or leftover test and deprecated permissions explained the mismatches. To build the permission map, the researchers modified Android 2.2 to record permission checks. They created automated and manual tests for public, private, and hidden APIs, as well as Content Providers and Intents. Stowaway then used static analysis, meaning it examined compiled applications without running them. It extracted API calls, looked up the permissions those calls could require, and compared that maximum-needed set with each app’s manifest declarations. The platform testing reached about 85 percent of the Android API and identified permission requirements for 1,259 methods. Android documentation listed only 78 methods, and the tests also uncovered documentation errors. That gap supports the researchers’ diagnosis that developers lacked reliable, method-level guidance. It also exposed the structural difficulty: permission checks lived behind several enforcement mechanisms rather than in a single policy list. Next came the application measurements. Among the 795 apps Stowaway fully handled, the adjusted estimate was that roughly a third were truly overprivileged. The adjustment used manual review to account for false alerts. The observed error patterns often looked like engineering confusion. Some apps requested permissions even when they handed protected work to another app. Others copied inaccurate advice or retained obsolete and test permissions. The distribution of excess permissions likewise suggested narrow mistakes rather than indiscriminate requests. The estimate has firm boundaries. Stowaway was tied to Android 2.2, and the apps came from a 2011 Android Market snapshot. The analysis could count dead code—code present but never executed—and it overestimated some Content Provider needs. It also could not resolve complex reflection. The study did not quantify its false-negative rate, so the number of overprivileged apps it missed remains unknown. Manifest-to-code matching also did not determine actual data use, transmission, or purpose. For present-day Android reviews, do not carry that historical estimate forward as a baseline. Runtime grants and automatic permission reset can reduce standing access in the paths they cover. Scoped storage and selectors that avoid broad permissions can do the same. But the available platform record does not provide a like-for-like modern replication proving that manifest overprivilege fell by a specific percentage. Mapping remains version- and path-dependent. Native code and interprocess calls can escape a simple API list. So can reflection, dynamically loaded SDKs, and server-controlled behavior. Mobile detection teams should treat manifest analysis as one layer. They should compare it with observed runtime access and off-device data disclosures, then check network and server evidence. Android Permissions Demystified contributed a tested mapping from protected Android operations to permissions and a static checker that exposed mismatches between reachable code and manifest requests. For mobile security and app-review teams, the useful move is to keep those mappings version-specific, improve method-level permission guidance, and pair code analysis with runtime and purpose checks. They should not read a mismatch as proof that sensitive data was used, or read the historical percentage as a measurement of today’s Android ecosystem.