From 8df5b485786b6f884e5793fe1fe6b1ba83225939 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 13:41:00 +0800 Subject: [PATCH] fix: gunakan tools:node=remove agar Gradle merger hapus READ_MEDIA_IMAGES/VIDEO dari semua library manifest Filter sebelumnya hanya menghapus dari app manifest, tapi expo-image-picker menyuntikkan permission lewat library manifest-nya sendiri saat Gradle build. --- android/app/src/main/AndroidManifest.xml | 2 ++ plugins/withRemoveMediaPermissions.js | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c1a833b..303e9d2 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + diff --git a/plugins/withRemoveMediaPermissions.js b/plugins/withRemoveMediaPermissions.js index 0ce0ea8..283e630 100644 --- a/plugins/withRemoveMediaPermissions.js +++ b/plugins/withRemoveMediaPermissions.js @@ -8,12 +8,29 @@ const BLOCKED_PERMISSIONS = [ const withRemoveMediaPermissions = (config) => withAndroidManifest(config, (config) => { const manifest = config.modResults.manifest; - const permissions = manifest['uses-permission'] ?? []; - manifest['uses-permission'] = permissions.filter( + // Pastikan xmlns:tools ada di manifest root + if (!manifest.$['xmlns:tools']) { + manifest.$['xmlns:tools'] = 'http://schemas.android.com/tools'; + } + + // Hapus entry yang ada (apapun atributnya) + const existing = manifest['uses-permission'] ?? []; + manifest['uses-permission'] = existing.filter( (perm) => !BLOCKED_PERMISSIONS.includes(perm.$?.['android:name']) ); + // Tambahkan entry dengan tools:node="remove" agar Gradle merger + // membuang permission ini dari SEMUA sumber (termasuk library manifests) + for (const permission of BLOCKED_PERMISSIONS) { + manifest['uses-permission'].push({ + $: { + 'android:name': permission, + 'tools:node': 'remove', + }, + }); + } + return config; });