From 08f13a030d42ae7ad6c15b1f70b43a88115f6eda Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Sun, 25 May 2025 21:17:30 +0530 Subject: [PATCH] Android Editor: Disable `nomedia` file creation for Android 11 (api level 30) Fixes https://github.com/godotengine/godot/issues/106479 Fixes https://github.com/godotengine/godot/issues/105399 --- editor/editor_file_system.cpp | 22 +++++++++++++--------- editor/project_manager/project_dialog.cpp | 20 ++++++++++++-------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 5f48d34f6c5..f0a39f5a2a2 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1069,15 +1069,19 @@ void EditorFileSystem::scan() { if (first_scan) { _first_scan_filesystem(); #ifdef ANDROID_ENABLED - const String nomedia_file_path = ProjectSettings::get_singleton()->get_resource_path().path_join(".nomedia"); - if (!FileAccess::exists(nomedia_file_path)) { - // Create a .nomedia file to hide assets from media apps on Android. - Ref f = FileAccess::open(nomedia_file_path, FileAccess::WRITE); - if (f.is_null()) { - // .nomedia isn't so critical. - ERR_PRINT("Couldn't create .nomedia in project path."); - } else { - f->close(); + // Android 11 has some issues with nomedia files, so it's disabled there. See GH-106479 and GH-105399 for details. + String sdk_version = OS::get_singleton()->get_version().get_slicec('.', 0); + if (sdk_version != "30") { + const String nomedia_file_path = ProjectSettings::get_singleton()->get_resource_path().path_join(".nomedia"); + if (!FileAccess::exists(nomedia_file_path)) { + // Create a .nomedia file to hide assets from media apps on Android. + Ref f = FileAccess::open(nomedia_file_path, FileAccess::WRITE); + if (f.is_null()) { + // .nomedia isn't so critical. + ERR_PRINT("Couldn't create .nomedia in project path."); + } else { + f->close(); + } } } #endif diff --git a/editor/project_manager/project_dialog.cpp b/editor/project_manager/project_dialog.cpp index 118e6e486c4..42bacd97d53 100644 --- a/editor/project_manager/project_dialog.cpp +++ b/editor/project_manager/project_dialog.cpp @@ -739,14 +739,18 @@ void ProjectDialog::ok_pressed() { hide(); if (mode == MODE_NEW || mode == MODE_IMPORT || mode == MODE_INSTALL) { #ifdef ANDROID_ENABLED - // Create a .nomedia file to hide assets from media apps on Android. - const String nomedia_file_path = path.path_join(".nomedia"); - Ref f2 = FileAccess::open(nomedia_file_path, FileAccess::WRITE); - if (f2.is_null()) { - // .nomedia isn't so critical. - ERR_PRINT("Couldn't create .nomedia in project path."); - } else { - f2->close(); + // Android 11 has some issues with nomedia files, so it's disabled there. See GH-106479, GH-105399 for details. + String sdk_version = OS::get_singleton()->get_version().get_slicec('.', 0); + if (sdk_version != "30") { + // Create a .nomedia file to hide assets from media apps on Android. + const String nomedia_file_path = path.path_join(".nomedia"); + Ref f2 = FileAccess::open(nomedia_file_path, FileAccess::WRITE); + if (f2.is_null()) { + // .nomedia isn't so critical. + ERR_PRINT("Couldn't create .nomedia in project path."); + } else { + f2->close(); + } } #endif emit_signal(SNAME("project_created"), path, edit_check_box->is_pressed());