Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if Android Permission is actually being used?


I am maintaining one existing (very-huge, very-sensitive) Android Application.
The other day, I have received an email from my client that, the Application might be declaring the Permissions that are not actively being used.

For example, they wants me to remove "WRITE_EXTERNAL_STORAGE" permission.
I have removed it and compiled it and run the App. There is NO error at all.
But, just because of that, I don't think I can assume that permission is not actively being used at all.

My question is "Is there anyway I can easily and simply check the permission if it is actively being used ?"

Frankly, I don't want to go through every little detail aspect of that application just to fine out the permission is required or not.
I just don't have time.

My goal is check if the permission is actively being used. If not, remove the permission.
Hope there is an less-time consuming way for that.

Regards

like image 577
Aung Pyae Avatar asked Jul 21 '14 05:07

Aung Pyae


People also ask

How do I check permissions on Android?

To check if the user has already granted your app a particular permission, pass that permission into the ContextCompat. checkSelfPermission() method. This method returns either PERMISSION_GRANTED or PERMISSION_DENIED , depending on whether your app has the permission.

How can I tell if an Android user is denied permission?

To know if the user denied with "never ask again" you can check again the shouldShowRequestPermissionRationale method in your onRequestPermissionsResult when the user did not grant the permission. You can open your app setting with this code: Intent intent = new Intent(Settings.

What is the difference between permission and uses permission in Android?

What is difference between permission and uses-permission in Android? permission is normally used when making a custom permission e.g. when making an app that other apps can tie in to, limiting access is a must. uses-permission is used when your app actually needs a permission it doesn't have normally.


2 Answers

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.
like image 104
Vasanth Avatar answered Sep 23 '22 08:09

Vasanth


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.

like image 30
Paul Ratazzi Avatar answered Sep 25 '22 08:09

Paul Ratazzi