From 267454637f0d4667406d61bf8770fbea8c8366b0 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 11:08:06 +0800 Subject: [PATCH 1/6] fix: hapus READ_MEDIA_IMAGES & VIDEO via Expo config plugin agar tahan prebuild EAS Perubahan sebelumnya langsung di android/ tidak efektif karena EAS melakukan prebuild ulang. Plugin withRemoveMediaPermissions.js kini memfilter permission tersebut saat prebuild berjalan. --- android/app/build.gradle | 2 +- android/app/src/main/AndroidManifest.xml | 2 -- app.config.js | 3 ++- plugins/withRemoveMediaPermissions.js | 20 ++++++++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 plugins/withRemoveMediaPermissions.js diff --git a/android/app/build.gradle b/android/app/build.gradle index ef41eb1..65c8399 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -92,7 +92,7 @@ android { applicationId 'mobiledarmasaba.app' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 17 + versionCode 19 versionName "2.2.0" } signingConfigs { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index acf5b70..c1a833b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,4 @@ - - diff --git a/app.config.js b/app.config.js index b5e7119..c0b5694 100644 --- a/app.config.js +++ b/app.config.js @@ -23,7 +23,7 @@ export default { }, android: { package: "mobiledarmasaba.app", - versionCode: 19, + versionCode: 20, adaptiveIcon: { foregroundImage: "./assets/images/logo-icon-small.png", backgroundColor: "#ffffff" @@ -54,6 +54,7 @@ export default { "expo-font", "expo-image-picker", "expo-web-browser", + "./plugins/withRemoveMediaPermissions", [ "@react-native-firebase/app", { diff --git a/plugins/withRemoveMediaPermissions.js b/plugins/withRemoveMediaPermissions.js new file mode 100644 index 0000000..0ce0ea8 --- /dev/null +++ b/plugins/withRemoveMediaPermissions.js @@ -0,0 +1,20 @@ +const { withAndroidManifest } = require('@expo/config-plugins'); + +const BLOCKED_PERMISSIONS = [ + 'android.permission.READ_MEDIA_IMAGES', + 'android.permission.READ_MEDIA_VIDEO', +]; + +const withRemoveMediaPermissions = (config) => + withAndroidManifest(config, (config) => { + const manifest = config.modResults.manifest; + const permissions = manifest['uses-permission'] ?? []; + + manifest['uses-permission'] = permissions.filter( + (perm) => !BLOCKED_PERMISSIONS.includes(perm.$?.['android:name']) + ); + + return config; + }); + +module.exports = withRemoveMediaPermissions; From 383ca069d530a1254b1e5090e4cd667de72f4915 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 11:32:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?chore:=20bump=20versionCode=2019=20?= =?UTF-8?q?=E2=86=92=2020?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 65c8399..ddd8882 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -92,7 +92,7 @@ android { applicationId 'mobiledarmasaba.app' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 19 + versionCode 20 versionName "2.2.0" } signingConfigs { From 21617f9c4cbcd8e707839988401f126a706da79c Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 11:32:57 +0800 Subject: [PATCH 3/6] chore: update kotlin error logs --- .../errors/{errors-1757572005452.log => errors-1780456196926.log} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename android/.kotlin/errors/{errors-1757572005452.log => errors-1780456196926.log} (100%) diff --git a/android/.kotlin/errors/errors-1757572005452.log b/android/.kotlin/errors/errors-1780456196926.log similarity index 100% rename from android/.kotlin/errors/errors-1757572005452.log rename to android/.kotlin/errors/errors-1780456196926.log From 8df5b485786b6f884e5793fe1fe6b1ba83225939 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 13:41:00 +0800 Subject: [PATCH 4/6] 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; }); From 02904b1e48f0d402b5078df422a9fb6143d8018d Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 13:46:59 +0800 Subject: [PATCH 5/6] =?UTF-8?q?chore:=20bump=20versionCode=2020=20?= =?UTF-8?q?=E2=86=92=2021?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 2 +- app.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index ddd8882..79eea55 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -92,7 +92,7 @@ android { applicationId 'mobiledarmasaba.app' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 20 + versionCode 21 versionName "2.2.0" } signingConfigs { diff --git a/app.config.js b/app.config.js index c0b5694..34abd27 100644 --- a/app.config.js +++ b/app.config.js @@ -23,7 +23,7 @@ export default { }, android: { package: "mobiledarmasaba.app", - versionCode: 20, + versionCode: 21, adaptiveIcon: { foregroundImage: "./assets/images/logo-icon-small.png", backgroundColor: "#ffffff" From 47ed52e9d2485387d7d021604c4396a3bd4d0fe6 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 3 Jun 2026 13:49:27 +0800 Subject: [PATCH 6/6] chore: update kotlin error logs --- android/.kotlin/errors/errors-1780456196926.log | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 android/.kotlin/errors/errors-1780456196926.log diff --git a/android/.kotlin/errors/errors-1780456196926.log b/android/.kotlin/errors/errors-1780456196926.log deleted file mode 100644 index 1219b50..0000000 --- a/android/.kotlin/errors/errors-1780456196926.log +++ /dev/null @@ -1,4 +0,0 @@ -kotlin version: 2.0.21 -error message: The daemon has terminated unexpectedly on startup attempt #1 with error code: 0. The daemon process output: - 1. Kotlin compile daemon is ready -