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 your APK via Android Studio or the command line.
- Locate your merged AndroidManifest.xml in the build directory:
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.
android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_WIFI_STATE android.permission.CAMERA android.permission.FOREGROUND_SERVICE android.permission.INTERNET android.permission.VIBRATE
print_permissions_from_androidmanifest.pyand 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.xmlto the clipboard, and save it to a file named
AndroidManifest.xmlin the same directory as
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!