1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-22 15:06:45 +00:00

Merge pull request #106797 from syntaxerror247/nomedia-crash

Android Editor: Disable `nomedia` file creation for Android 11 (api level 30)
This commit is contained in:
Thaddeus Crews
2025-05-27 09:39:22 -05:00
3 changed files with 26 additions and 18 deletions

View File

@@ -1069,15 +1069,19 @@ void EditorFileSystem::scan() {
if (first_scan) { if (first_scan) {
_first_scan_filesystem(); _first_scan_filesystem();
#ifdef ANDROID_ENABLED #ifdef ANDROID_ENABLED
const String nomedia_file_path = ProjectSettings::get_singleton()->get_resource_path().path_join(".nomedia"); // Android 11 has some issues with nomedia files, so it's disabled there. See GH-106479 and GH-105399 for details.
if (!FileAccess::exists(nomedia_file_path)) { String sdk_version = OS::get_singleton()->get_version().get_slicec('.', 0);
// Create a .nomedia file to hide assets from media apps on Android. if (sdk_version != "30") {
Ref<FileAccess> f = FileAccess::open(nomedia_file_path, FileAccess::WRITE); const String nomedia_file_path = ProjectSettings::get_singleton()->get_resource_path().path_join(".nomedia");
if (f.is_null()) { if (!FileAccess::exists(nomedia_file_path)) {
// .nomedia isn't so critical. // Create a .nomedia file to hide assets from media apps on Android.
ERR_PRINT("Couldn't create .nomedia in project path."); Ref<FileAccess> f = FileAccess::open(nomedia_file_path, FileAccess::WRITE);
} else { if (f.is_null()) {
f->close(); // .nomedia isn't so critical.
ERR_PRINT("Couldn't create .nomedia in project path.");
} else {
f->close();
}
} }
} }
#endif #endif

View File

@@ -739,14 +739,18 @@ void ProjectDialog::ok_pressed() {
hide(); hide();
if (mode == MODE_NEW || mode == MODE_IMPORT || mode == MODE_INSTALL) { if (mode == MODE_NEW || mode == MODE_IMPORT || mode == MODE_INSTALL) {
#ifdef ANDROID_ENABLED #ifdef ANDROID_ENABLED
// Create a .nomedia file to hide assets from media apps on Android. // Android 11 has some issues with nomedia files, so it's disabled there. See GH-106479, GH-105399 for details.
const String nomedia_file_path = path.path_join(".nomedia"); String sdk_version = OS::get_singleton()->get_version().get_slicec('.', 0);
Ref<FileAccess> f2 = FileAccess::open(nomedia_file_path, FileAccess::WRITE); if (sdk_version != "30") {
if (f2.is_null()) { // Create a .nomedia file to hide assets from media apps on Android.
// .nomedia isn't so critical. const String nomedia_file_path = path.path_join(".nomedia");
ERR_PRINT("Couldn't create .nomedia in project path."); Ref<FileAccess> f2 = FileAccess::open(nomedia_file_path, FileAccess::WRITE);
} else { if (f2.is_null()) {
f2->close(); // .nomedia isn't so critical.
ERR_PRINT("Couldn't create .nomedia in project path.");
} else {
f2->close();
}
} }
#endif #endif
emit_signal(SNAME("project_created"), path, edit_check_box->is_pressed()); emit_signal(SNAME("project_created"), path, edit_check_box->is_pressed());

View File

@@ -315,7 +315,7 @@ String OS_Android::get_version() const {
} }
// Handles stock Android. // Handles stock Android.
String sdk_version = get_system_property("ro.build.version.sdk_int"); String sdk_version = get_system_property("ro.build.version.sdk");
String build = get_system_property("ro.build.version.incremental"); String build = get_system_property("ro.build.version.incremental");
if (!sdk_version.is_empty()) { if (!sdk_version.is_empty()) {
if (!build.is_empty()) { if (!build.is_empty()) {