How to check if Android Permission is actually being used?

In Android Studio 1.3 & Android Support Library v7:22.2.0, you have solution for it.

Steps:

  1. Update Android Studio to V1.3
  2. Update your Android Support Library to v7:22.2.0
  3. Run Android Lint (Analyse -> Inspect Code), In Lint Error see for Type "Android -> Constant & Resource Type MisMatch", Which shows all methods which requires permission.

Explanation

  1. Android has introduced new annotation @requirespermission.
  2. All SDK methods which requires permission are annotated with @requirespermission.
  3. When we call any sdk method which requires permission without properly checking whether we have permission or not, Android studio will through lint error.

There is a group at Berkeley that wrote a paper about Android permissions. They talk about over-permissions and developed a tool called Stowaway that would analyze your APK for unused permissions. The analysis was based on the app's API calls and their own mapping of the permissions needed for each API call (see the paper for details). The tool throws a flag if there is a permission in the manifest that is not mapped to any of the API calls found in the APK.

For a while, a web-based version of the tool was available at http://www.android-permissions.org/, but it is from the Gingerbread era and was never updated. The page now suggests using PScout.

PScout does a better job than Stowaway at generating the permission maps. However, PScout does not include an APK analyzer, so you will have to manually compare the mappings they provide with API calls made by your app. Unfortunately, if you're interested in maps for versions beyond 5.1.1, you'll have to generate them yourself using the provided PScout code and your own Framework source.

You might also check out the various APK analyzers here to see if they include the functionality you are looking for.


I tried the method suggested by Vasanth but it doesn't work for me. In fact, because my project has flavors and Code Inspection doesn't work for the project with flavors. See https://code.google.com/p/android/issues/detail?id=210073.

But Running Lint from console works. So steps are simple:

  1. Remove permissions from your manifest.
  2. Run Lint for flavor as described here https://stackoverflow.com/a/32708435/1170154.
  3. Open Lint result and find section Correctness > Error MissingPermission: Missing Permissions. It will contain all calls that require permissions.

As of Android Studio 3.3, running Analyze → Inspect Code will inform you of missing permissions under Android → Lint → Correctness → Missing Permissions