Permission Awareness
Knowing what you ship to your users is key, and permissions are one part of it. If you just look at your src/main/AndroidManifest.xml
file, and think that’s all the permissions you will be shipping to the Play Store, you may find your self surprised that it may not be true. Applications can declare permissions, but 3rd party libraries and modules can declare them as well. Only the final, AndroidManifest.xml that has been generated via the manifest merging process is the source of truth.
In this article I share how the merged manifest is created, where you can find it, and a small Python script I created to parse the file and print out a list of permissions.
What is the “manifest merge” process?
There is a “manifest merge” process which takes all libraries and modules that your application relies on which ends up generating the final AndroidManifest.xml file. Merging the manifest is important because dependencies you rely on can bring in extra permissions you don’t define in your application yourself.
Where do I get my merged AndroidManifest.xml file?
Option 1: Grab the merged manifest from the build
directory.
- Build your APK via Android Studio or the command line.
- Example
./gradlew app:assembleRelease
- Example
- Locate your merged AndroidManifest.xml in the build directory:
app/build/intermediates/merged_manifests/release/AndroidManifest.xml
Option 2: (You only have the APK, but didn’t build it yourself)
- Copy/paste the APK you have into Android Studio. Then open it, and view the AndroidManifest.xml. At that point, you can view it there, or copy out the contents to use with the script.
- Alternatively you can use something like apktool if you don’t have Android Studio.
How do I view all the permissions?
If you are looking to just see if a single permission has been declared, just search through the large AndroidManifest.xml file.
How do I create a permission report?
Sometimes it is nice to know what all your permissions are in a nice clean way. There are thousands of ways you could do this, but I created a python script that creates a clean alphabetized list of all your permissions.
Example Output
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CAMERA
android.permission.FOREGROUND_SERVICE
android.permission.INTERNET
android.permission.VIBRATE
Instructions
- Download
print_permissions_from_androidmanifest.py
and place it in a directory. - Open your APK in Andorid Studio (by double clicking on it in your build folder)
- Copy the contents of
AndroidManifest.xml
to the clipboard, and save it to a file namedAndroidManifest.xml
in the same directory asprint_permissions_from_androidmanifest.py
. - Run
python print_permissions_from_androidmanifest.py
Conclusion
It’s nice to cleanly see what permissions you are requesting when you send your app. There are probably better ways to do something like this, and if you know of some, I’ll be happy to link them in this post!