const { withAndroidManifest } = require('@expo/config-plugins'); const permissionsToRemove = [ 'android.permission.READ_MEDIA_AUDIO', 'android.permission.READ_MEDIA_IMAGES', 'android.permission.READ_MEDIA_VIDEO', 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED', 'android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE' ]; module.exports = function withRemoveMediaPermissions(config) { return withAndroidManifest(config, async (config) => { let androidManifest = config.modResults.manifest; if (!androidManifest['uses-permission']) { androidManifest['uses-permission'] = []; } // Make sure we have the tools namespace if (!androidManifest.$['xmlns:tools']) { androidManifest.$['xmlns:tools'] = 'http://schemas.android.com/tools'; } // Remove any existing declarations of these permissions in the app manifest androidManifest['uses-permission'] = androidManifest['uses-permission'].filter( p => !permissionsToRemove.includes(p.$['android:name']) ); // Add explicit tools:node="remove" directives to block libraries from adding them permissionsToRemove.forEach(permissionName => { androidManifest['uses-permission'].push({ $: { 'android:name': permissionName, 'tools:node': 'remove' } }); }); return config; }); };