How to check if Android Permission is actually bei

2019-02-04 05:11发布

问题:


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

回答1:

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.


回答2:

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.



回答3:

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.


回答4:

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