eXtended Permission Manager for Android - view and set Manifest Permissions and AppOps
Using eXtended Permission Manager, for each installed app, on single screen, you can:
- View, grant or revoke manifest permissions
- View AppOps permissions and choose one of multiple modes
- Set your desired reference value for every changeable permission
The app evolved from a shell script to a GUI for my personal needs. After a ROM upgrade or changing device, it's a time-taking process to review all installed apps for granted permissions and revoke the unnecessary ones (after all privacy matters). To come up with a solution, you can set reference states of permissions which can be quickly backed up and restored. Colored bars at left indicate reference states and make it quite easy to review packages and permissions at a glance.
Manifest permissions are those normally called permissions e.g. Storage, Camera etc. AppOps (app operations) is a robust framework Android uses at back end for access control. With every Android release manifest permissions are becoming more dependent on AppOps. So it's fun to control both simultaneously and see how they relate to each other.
In short, AppOps provide a fine-grained control over many of the manifest permissions. Plus it provides additional controls like background execution, vibration, clipboard access etc. Explore the app to see more.
- In order to let Permission Manager X serve you at its best, either the device must be rooted or you need to enable ADB over network.
- android.permission.INTERNET is required to use ADB over network. The only connection made outside the device is to check for app updates.
- The app is tested on stock Android 7-11. Some highly customized ROMs may behave unexpectedly.
build.gradle
calls a shell script to build native binaries. So a Linux environment is expected with all standard tools.- Download code:
git clone --recurse-submodules https://github.com/mirfatif/PermissionManagerX.git && cd PermissionManagerX
- Set
sdk.dir
inlocal.properties
to the directory containing Android SDK API level (platform) 30 and build-tools 30.0.3 (and obviously the latest SDKtools
andplatform-tools
). - App uses a number of AOSP's hidden/internal APIs which are not available in official SDK. Replace
android.jar
with a custom built which includes all of the non-SDK interfaces (see details here). Plus in Android 11 some of the hidden APIs have been entirely removed which are required for the app to work. So they need to be added to the SDK (I just edited the respective.class
files and added stub methods). A workingandroid.jar
is available here. - Set
ndk.dir
inlocal.properties
to the directory containing Android NDK (I used r21d (21.3)). - Set
JAVA_HOME
environment variable to JDK 11 (verifyGoogleJavaFormat
task won't work with JDK 1.8). Orjava
andjavac
must be onPATH
. - Run
./gradlew
with appropriate task name appended. Or use IntelliJ IDEA / Android Studio.
Credits and thanks to the developers of:
- https://github.com/anggrayudi/android-hidden-api
- https://github.com/cgutman/AdbLib
- https://github.com/sherter/google-java-format-gradle-plugin
- https://github.com/material-components/material-components-android
- https://github.com/saket/Better-Link-Movement-Method
- https://github.com/square/leakcanary
You CANNOT use and distribute the app icon in anyway, except for Permission Manager X app.
Permission Manager X is free software: you can redistribute it and/or modify
it under the terms of the Affero GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Affero GNU General Public License for more details.
You should have received a copy of the Affero GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.