Using adb, how can I find out the which permissions an Android application requires?
Because I want to display the permissions of multiple applications on different devices, viewing them in Google Play or Settings > Applications manager requires too much manual work.
You can grant all run-time permissions on installation by using; adb install -g. Or just use ';' between each pm grants like this?
I just wanted to combine Jason's and Juuso's answers together and notice that the former lists permissions that were granted, while the latter lists permissions that were requested (including ones that were granted).
To see only permissions that were granted (but omitting ones that were requested but not granted) use
adb shell dumpsys package packagename and check grantedPermissions section at the bottom of the output.
To list all permissions (requested but not granted + requested and granted):
Notice the APK of a package. You can run the same command
adb shell dumpsys package packagename and get the APK path from codePath element of its output.
(if there is no aapt on your device/emulator) You'll need to pull the apk from device/emulator as Juuso Ohtonen has pointed out in his answer. So execute something like this from your desktop:
adb pull /data/app/com.your.package.apk List all permissions of the package
If missing from device/emulator aapt can be found under build-tools/<version>/in your Android SDK.
Then execute
aapt d permissions /path/to/com.your.package.apk List all applications along with their installation paths (use -3 flag if you're only interested in 3rd party apps). As an example, let's try to find out YouTube app permissions. adb shell pm list packages -f 
Output:
...
package:/data/app/com.google.android.youtube-1.apk=com.google.android.youtube
...
Pull the selected apk from the device: adb pull /data/app/com.google.android.youtube-1.apk
List the permissions with aapt d permissions com.google.android.youtube-1.apk
Output:
    uses-permission: android.permission.BROADCAST_STICKY     uses-permission: android.permission.CALL_PHONE     uses-permission: android.permission.CALL_PRIVILEGED     uses-permission: android.permission.WRITE_SETTINGS     uses-permission: android.permission.WRITE_SECURE_SETTINGS     uses-permission: android.permission.READ_CONTACTS     uses-permission: android.permission.READ_CALL_LOG     uses-permission: android.permission.WRITE_CONTACTS     uses-permission: android.permission.WRITE_CALL_LOG     uses-permission: android.permission.SYSTEM_ALERT_WINDOW     uses-permission: android.permission.INTERNAL_SYSTEM_WINDOW     uses-permission: android.permission.ADD_SYSTEM_SERVICE     uses-permission: android.permission.VIBRATE     uses-permission: android.permission.BLUETOOTH     uses-permission: android.permission.BLUETOOTH_ADMIN     uses-permission: android.permission.REORDER_TASKS     uses-permission: android.permission.CHANGE_CONFIGURATION     ... ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With