29

Is there anyway to list all the applications installed on your phone and the permissions they require all on one page, or export the list so it can easily be audited?

5 Answers 5

14

Use market applications like Permission Watchdog or Permissions. Also, there are several others.

5
  • Unfortunately, Market application has a bug (or intended feature?) when not all permissions are listed when installing the application. This may a compatibility issue with software designed for older android releases... code.google.com/p/android/issues/detail?id=9365 Dec 2, 2010 at 13:49
  • 2
    perhaps including comment into you answer would be simpler.
    – bbaja42
    Dec 3, 2010 at 16:36
  • @Nikolaenko, apparently it is on purpose and changed now: android.stackexchange.com/questions/605/…
    – BlackShift
    Dec 24, 2010 at 14:30
  • @BlackShift, what do you mean by "changed now"? Changed by Android dev. team? Dec 27, 2010 at 13:26
  • @Nikolaenko, I think I was unclear because it is unclear to me. I'm running cyanogenmod 6, android 2.2, and almost all apps ask for the permissions that your link claims are implicitely granted. So I don't know who changed this (cyanogen or android team).
    – BlackShift
    Dec 27, 2010 at 14:45
4

Another app that I ended up using instead of Permissions is RL Permissions. I prefer the interface. As far as which one works better, I don't know.

2

aSpotCat is also a nice app for permission audit.

0

Permission Friendly Apps will list installed apps by their order of most demanding to least demanding permissions requirements. (It doesn't actually track or audit or adjust their behavior, though.)

0

Since no Android version is mentioned in the question, I'm proposing a command-line based answer relevant to Android version 4.2.1 and above. This ideally is an OS-independent solution, OS on PC, that is.

Dependencies

  • Requires to be setup in PC.
  • Requires busybox binary. If the device is rooted, install Busybox app. Else, download busybox binary from official source, rename the binary to busybox, set Linux compatible executable permission on that binary for everyone and move it into device using

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC
    
  • Requires aapt binary. If you're running a CM or its derivative ROM then ignore this requirement. Otherwise, for Android 4.x, you can consider downloading the binary from here, rename the binary to aapt, set Linux compatible executable permission on that binary for everyone and move it into device using

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC . 
    

    For Android 5.x users, ask Google for assistance.

Here's my little script that does the magic:

#!/system/bin/sh

# Check if the busybox binary exists under /data/local/tmp/ or /system/xbin. Set the detected binary's path into the variable busybox or exit if file doesn't exist or executable permission not set
[[ -x /data/local/tmp/busybox ]] && busybox=/data/local/tmp/busybox || { [[ -x /system/xbin/busybox ]] && busybox=/system/xbin/busybox || { printf "busybox binary not found or executable permission not set. Exiting\n" && exit; }; }
# Check if the aapt binary exists under /data/local/tmp or /system/bin or /system/xbin. Set the detected binary's path into the variable aapt or exit if file doesn't exist or executable permission not set
[[ -x /data/local/tmp/aapt ]] && aapt=/data/local/tmp/aapt || { [[ -x /system/bin/aapt ]] && aapt=/system/bin/aapt || { [[ -x /system/xbin/aapt ]] && aapt=/system/xbin/aapt || { printf "aapt binary not found or executable permission not set. Exiting\n" && exit; }; }; }

# List package name of all the installed apps and save them in the file packages.txt under /sdcard
pm list packages | $busybox sed 's/^package://g' | $busybox sort -o /sdcard/packages.txt

# For each package name in the output we just saved, get the app's label using $path and $label, print a line and then finally list the permissions granted to the app 
while read line; do 
    path=$(pm path $line | $busybox sed 's/^package://g'); 
    label=$($aapt d badging $path  | $busybox grep 'application: label=' | $busybox cut -d "'" -f2);  
    $busybox printf "Permissions for app $label having package name $line\n"; 
    dumpsys package $line | $busybox sed -e '1,/grantedPermissions:/d' -e '/^\s*$/,$d' | $busybox sort;
    $busybox printf "\n"; 
done < /sdcard/packages.txt

Demo output:

Permissions for app DisableService having package name cn.wq.disableservice
      android.permission.READ_EXTERNAL_STORAGE
      android.permission.WRITE_EXTERNAL_STORAGE

Permissions for app Indecent Xposure having package name co.vanir.indecentxposure
      android.permission.RECEIVE_BOOT_COMPLETED

Permissions for app Tags having package name com.android.apps.tag
      android.permission.CALL_PHONE
      android.permission.NFC
      android.permission.READ_CONTACTS
      android.permission.WAKE_LOCK
      android.permission.WRITE_SECURE_SETTINGS
...
...
Permissions for app Themes Provider having package name org.cyanogenmod.themes.provider
      android.permission.ACCESS_NOTIFICATIONS
      android.permission.ACCESS_THEME_MANAGER
      android.permission.INTERNET
      android.permission.READ_THEMES
      android.permission.WRITE_SECURE_SETTINGS
      android.permission.WRITE_SETTINGS
      android.permission.WRITE_THEMES

Save the script in PC into a file named perm_script.sh and move it into /sdcard using

adb push LOCAL_FILE /sdcard/   # LOCAL_FILE is the  path where you saved that file into PC

Run that file

adb shell sh /sdcard/perm_script.sh > OUTPUT_FILE   # OUTPUT_FILE is the path where you want to save the final output

The greater the apps installed in the system, the greater the time will be for the command to complete execution. In my device, it took around three minutes.

Related: Is there a native way to find all the installed apps that have access to a phone feature?

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .