DevelopersSeptember 14, 2026by
EmpoorioChain Core
EmpoorioChain Core

Engineering Notes #6: Removing a Permission from the Manifest Does Not Remove It from the App

What happened

OuranoOS declared Android permissions it did not need. They were deleted from AndroidManifest.xml. The next release bundle contained exactly the same permissions as before (checked 2 September 2026).

Why

Android merges the app's manifest with every dependency's manifest. A plugin that declares a permission reinjects it during the merge. Deleting the line in the app's manifest removes the app's request for the permission, not the plugin's.

Finding the culprit

build/app/outputs/logs/manifest-merger-release-report.txt

grep -A3 "uses-permission#android.permission.X" names the module: ADDED from [:plugin_name].

Real cases in OuranoOS: a file-opening plugin declared READ_MEDIA_IMAGES/VIDEO/AUDIO (unneeded when files open from the app's private directory through its own provider); a camera plugin declared RECORD_AUDIO (unneeded for still capture).

Removing it for real

In the app's manifest, with the tools namespace declared:

<uses-permission android:name="android.permission.X" tools:node="remove" />

Verifying

On the built bundle, not the source: extract the merged manifest from the AAB and read the permission list. The ecosystem's release scripts now do this, because the source manifest is not what ships.

The general form

This is the same shape as Engineering Notes #5: a change to the source that the build silently overrides. The check belongs on the artefact.

From the OuranoOS release preparation, 2026-09-02.

Share this article