Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
dbdcde3
Fix Android back gesture failing after keyboard dismissal (#109806)
AayushSarikhada Aug 30, 2025
64517f5
Update Android build tools to version 35.0.1
mhilbrunner Nov 5, 2025
ec9d317
Fix editor crash on exit
m4gr3d Nov 8, 2025
73d1786
Android: Fix root window shrinks when keyboard shows
syntaxerror247 Nov 9, 2025
9c5dbad
Fix storage scope for the obb directory
m4gr3d Dec 11, 2025
69ccb24
Ensure that the permission requests results are dispatched on the ren…
m4gr3d Dec 12, 2025
583021c
Trigger save of the RD pipeline cache on application pause
m4gr3d Dec 31, 2025
fc7c835
Use arch-filtered lambda for GDExtension dependency lookup (#111407).
ej-sanmartin Dec 30, 2025
8833807
[Android/Gradle] Do not ignore asset folders starting with `_`.
bruvzg Jan 2, 2026
b18f2de
Fix ANRs when shutting down the engine
m4gr3d Dec 19, 2025
368588c
iOS: Fix loading of xcframework dynamic libraries.
migueldeicaza Nov 14, 2025
abb67b6
[iOS] Automatically enable `iphone-ipad-minimum-performance-a12` is p…
bruvzg Dec 17, 2025
63d0172
Silence warnings about DisplayServer icons on iOS and visionOS
Calinou Jul 19, 2024
cab4f3c
X11: Fix memory leak in `screen_get_refresh_rate`
timothyqiu Oct 14, 2025
4ebc99b
[X11] Fix `keyboard_get_label_from_physical` errors when used on key …
bruvzg Oct 18, 2025
e4f98e4
Fix broken screenshot link in Appstream metadata
twrightsman Oct 24, 2025
2782832
Use pkg-config for recast flags
twrightsman Oct 25, 2025
209c9cd
[Linux] Add SSE4.2 support runtime check.
bruvzg Nov 1, 2025
27a63a6
Shader Baker: Fix Linux export warning
akien-mga Nov 6, 2025
5058247
Suppress SIGPIPE when writing to a pipe.
bruvzg Oct 1, 2025
c134817
Wayland: Fix accidental copy during global remove
deralmas Dec 12, 2025
a913ee0
Wayland: Fix SIGFPE with repeat rate of 0
deralmas Nov 27, 2025
03803a3
Wayland: Add default keyboard repetition values
deralmas Nov 27, 2025
31f1522
Destroy XKB keymap and state on seat capability change
deralmas Nov 27, 2025
a1fbe02
Lower timeout in X11 event thread to fix input delay issue
Chestnut45 Dec 4, 2025
14dafc0
[macOS] Update clang version check.
bruvzg Oct 25, 2025
38695fb
[macOS] Fix ~500ms hang on transparent OpenGL window creation on macO…
bruvzg Oct 14, 2025
ba1b18d
[macOS] Fix mouse enter events sent to wrong popup window.
bruvzg Nov 4, 2025
ecdd064
[PopupMenu] Update global menu shortcuts when shortcut is externally …
bruvzg Oct 16, 2025
8265686
[macOS] Disable window embedding code in export templates.
bruvzg Dec 12, 2025
5159ffe
[macOS] Make embedded window focus behavior more similar to Windows/X11.
bruvzg Sep 3, 2025
643d6aa
[macOS/Embedded] Release/recapture mouse on window focus change and e…
bruvzg Oct 31, 2025
27f0b2e
[macOS] Fix microphone issue
adamscott Oct 15, 2025
bdb6c47
MSVC: check catalog_productSemanticVersion instead of catalog_product…
WhenToBen Oct 22, 2025
bb12b76
Fix pressed keys resetted when hiding a window on Windows
Hilderin Mar 30, 2025
611df3f
CI: Build Windows without D3D12 if install fails
Repiteo Nov 24, 2025
17c5c3a
Fix EnumDevices stall using IAT hooks.
bruvzg Nov 21, 2025
0db5122
Web: Fix clipboard text encoding in `update_clipboard_callback`
troybonneau Sep 16, 2025
b46eaaa
BasisUniversal: Disable strict aliasing to fix GCC optimization issue
akien-mga Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions .github/workflows/windows_builds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ env:
dev_mode=yes
module_text_server_fb_enabled=yes
debug_symbols=no
d3d12=yes
"angle_libs=${{ github.workspace }}/"
"accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.17.0/"
SCONS_CACHE_MSVC_CONFIG: true
Expand Down Expand Up @@ -73,7 +72,16 @@ jobs:
uses: ./.github/actions/godot-deps

- name: Download Direct3D 12 SDK components
run: python ./misc/scripts/install_d3d12_sdk_windows.py
shell: sh
id: d3d12-sdk
run: |
if python ./misc/scripts/install_d3d12_sdk_windows.py; then
echo "D3D12_ENABLED=yes" >> "$GITHUB_OUTPUT"
else
echo "::warning::Windows: Direct3D 12 SDK installation failed, building without Direct3D 12 support."
echo "D3D12_ENABLED=no" >> "$GITHUB_OUTPUT"
fi
continue-on-error: true

- name: Download pre-built ANGLE static libraries
uses: dsaltares/fetch-gh-release-asset@1.1.2
Expand All @@ -100,7 +108,7 @@ jobs:
- name: Compilation
uses: ./.github/actions/godot-build
with:
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }}
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }} d3d12=${{ steps.d3d12-sdk.outputs.D3D12_ENABLED }}
platform: windows
target: ${{ matrix.target }}

Expand Down
10 changes: 2 additions & 8 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -679,17 +679,11 @@ elif methods.using_clang(env):
# Apple LLVM versions differ from upstream LLVM version \o/, compare
# in https://en.wikipedia.org/wiki/Xcode#Toolchain_versions
if methods.is_apple_clang(env):
if cc_version_major < 10:
if cc_version_major < 16:
print_error(
"Detected Apple Clang version older than 10, which does not fully "
"support C++17. Supported versions are Apple Clang 10 and later."
"Detected Apple Clang version older than 16, supported versions are Apple Clang 16 (Xcode 16) and later."
)
Exit(255)
elif env["debug_paths_relative"] and cc_version_major < 12:
print_warning(
"Apple Clang < 12 doesn't support -ffile-prefix-map, disabling `debug_paths_relative` option."
)
env["debug_paths_relative"] = False
else:
if cc_version_major < 6:
print_error(
Expand Down
10 changes: 6 additions & 4 deletions core/extension/gdextension_library_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,13 @@ Error GDExtensionLibraryLoader::open_library(const String &p_path) {
&abs_dependencies_paths, // library_dependencies
};

err = OS::get_singleton()->open_dynamic_library(is_static_library ? String() : abs_path, library, &data);
// Apple has a complex lookup system which goes beyond looking up the filename, so we try that first.
err = OS::get_singleton()->open_dynamic_library(abs_path, library, &data);
if (err != OK) {
return err;
err = OS::get_singleton()->open_dynamic_library(String(), library, &data);
if (err != OK) {
return err;
}
}

return OK;
Expand Down Expand Up @@ -361,8 +365,6 @@ Error GDExtensionLibraryLoader::parse_gdextension_file(const String &p_path) {
return ERR_FILE_NOT_FOUND;
}

is_static_library = library_path.ends_with(".a") || library_path.ends_with(".xcframework");

if (!library_path.is_resource_file() && !library_path.is_absolute_path()) {
library_path = p_path.get_base_dir().path_join(library_path);
}
Expand Down
2 changes: 0 additions & 2 deletions core/extension/gdextension_library_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ class GDExtensionLibraryLoader : public GDExtensionLoader {
String library_path;
String entry_symbol;

bool is_static_library = false;

#ifdef TOOLS_ENABLED
bool is_reloadable = false;
#endif
Expand Down
3 changes: 3 additions & 0 deletions drivers/apple_embedded/display_server_apple_embedded.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,4 +230,7 @@ class DisplayServerAppleEmbedded : public DisplayServer {

void resize_window(CGSize size);
virtual void swap_buffers() override {}

virtual void set_native_icon(const String &p_filename) override;
virtual void set_icon(const Ref<Image> &p_icon) override;
};
8 changes: 8 additions & 0 deletions drivers/apple_embedded/display_server_apple_embedded.mm
Original file line number Diff line number Diff line change
Expand Up @@ -818,3 +818,11 @@ _FORCE_INLINE_ int _convert_utf32_offset_to_utf16(const String &p_existing_text,
#endif
return DisplayServer::VSYNC_ENABLED;
}

void DisplayServerAppleEmbedded::set_native_icon(const String &p_filename) {
// Not supported on Apple embedded platforms.
}

void DisplayServerAppleEmbedded::set_icon(const Ref<Image> &p_icon) {
// Not supported on Apple embedded platforms.
}
15 changes: 14 additions & 1 deletion drivers/apple_embedded/os_apple_embedded.mm
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,11 @@ Rect2 fit_keep_aspect_covered(const Vector2 &p_container, const Vector2 &p_rect)
path = get_framework_executable(get_executable_path().get_base_dir().path_join(p_path.get_file().get_basename() + ".framework"));
}

if (!FileAccess::exists(path)) {
// Load .dylib from within the executable path.
path = get_framework_executable(get_executable_path().get_base_dir().path_join(p_path.get_file().get_basename() + ".dylib"));
}

if (!FileAccess::exists(path)) {
// Load .dylib or framework from a standard iOS location.
path = get_framework_executable(get_executable_path().get_base_dir().path_join("Frameworks").path_join(p_path.get_file()));
Expand All @@ -284,8 +289,16 @@ Rect2 fit_keep_aspect_covered(const Vector2 &p_container, const Vector2 &p_rect)
path = get_framework_executable(get_executable_path().get_base_dir().path_join("Frameworks").path_join(p_path.get_file().get_basename() + ".framework"));
}

ERR_FAIL_COND_V(!FileAccess::exists(path), ERR_FILE_NOT_FOUND);
if (!FileAccess::exists(path)) {
// Load .dylib from a standard iOS location.
path = get_framework_executable(get_executable_path().get_base_dir().path_join("Frameworks").path_join(p_path.get_file().get_basename() + ".dylib"));
}

if (!FileAccess::exists(path) && (p_path.ends_with(".a") || p_path.ends_with(".xcframework"))) {
path = String(); // Try loading static library.
} else {
ERR_FAIL_COND_V(!FileAccess::exists(path), ERR_FILE_NOT_FOUND);
}
p_library_handle = dlopen(path.utf8().get_data(), RTLD_NOW);
ERR_FAIL_NULL_V_MSG(p_library_handle, ERR_CANT_OPEN, vformat("Can't open dynamic library: %s. Error: %s.", p_path, dlerror()));

Expand Down
5 changes: 5 additions & 0 deletions drivers/coreaudio/audio_driver_coreaudio.mm
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,11 @@
UInt32 flag = 1;
result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof(flag));
ERR_FAIL_COND_V(result != noErr, FAILED);
#ifdef MACOS_ENABLED
flag = 0;
result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, kOutputBus, &flag, sizeof(flag));
ERR_FAIL_COND_V(result != noErr, FAILED);
#endif

UInt32 size;
#ifdef MACOS_ENABLED
Expand Down
11 changes: 10 additions & 1 deletion drivers/unix/file_access_unix_pipe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@
#include <sys/types.h>
#include <unistd.h>
#include <cerrno>
#include <csignal>

#ifndef sighandler_t
typedef typeof(void(int)) *sighandler_t;
#endif

Error FileAccessUnixPipe::open_existing(int p_rfd, int p_wfd, bool p_blocking) {
// Open pipe using handles created by pipe(fd) call in the OS.execute_with_pipe.
Expand Down Expand Up @@ -165,7 +170,11 @@ bool FileAccessUnixPipe::store_buffer(const uint8_t *p_src, uint64_t p_length) {
ERR_FAIL_COND_V_MSG(fd[1] < 0, false, "Pipe must be opened before use.");
ERR_FAIL_COND_V(!p_src && p_length > 0, false);

if (::write(fd[1], p_src, p_length) != (ssize_t)p_length) {
sighandler_t sig_pipe = signal(SIGPIPE, SIG_IGN);
ssize_t ret = ::write(fd[1], p_src, p_length);
signal(SIGPIPE, sig_pipe);

if (ret != (ssize_t)p_length) {
last_error = ERR_FILE_CANT_WRITE;
return false;
} else {
Expand Down
7 changes: 6 additions & 1 deletion editor/export/editor_export_platform_apple_embedded.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,10 @@ bool EditorExportPlatformAppleEmbedded::get_export_option_visibility(const Edito
p_option == "application/signature") {
return advanced_options_enabled;
}
if (p_option == "capabilities/performance_a12") {
String rendering_method = get_project_setting(Ref<EditorExportPreset>(p_preset), "rendering/renderer/rendering_method.mobile");
return !(rendering_method == "forward_plus" || rendering_method == "mobile");
}

return true;
}
Expand Down Expand Up @@ -501,14 +505,15 @@ void EditorExportPlatformAppleEmbedded::_fix_config_file(const Ref<EditorExportP
// Note that capabilities listed here are requirements for the app to be installed.
// They don't enable anything.
Vector<String> capabilities_list = p_config.capabilities;
String rendering_method = get_project_setting(p_preset, "rendering/renderer/rendering_method.mobile");

if ((bool)p_preset->get("capabilities/access_wifi") && !capabilities_list.has("wifi")) {
capabilities_list.push_back("wifi");
}
if ((bool)p_preset->get("capabilities/performance_gaming_tier") && !capabilities_list.has("iphone-performance-gaming-tier")) {
capabilities_list.push_back("iphone-performance-gaming-tier");
}
if ((bool)p_preset->get("capabilities/performance_a12") && !capabilities_list.has("iphone-ipad-minimum-performance-a12")) {
if (((bool)p_preset->get("capabilities/performance_a12") || rendering_method == "forward_plus" || rendering_method == "mobile") && !capabilities_list.has("iphone-ipad-minimum-performance-a12")) {
capabilities_list.push_back("iphone-ipad-minimum-performance-a12");
}
for (int idx = 0; idx < capabilities_list.size(); idx++) {
Expand Down
3 changes: 2 additions & 1 deletion editor/export/gdextension_export_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ void GDExtensionExportPlugin::_export_file(const String &p_path, const String &p
}
}

Vector<SharedObject> dependencies_shared_objects = GDExtensionLibraryLoader::find_extension_dependencies(p_path, config, [p_features](String p_feature) { return p_features.has(p_feature); });
Vector<SharedObject> dependencies_shared_objects = GDExtensionLibraryLoader::find_extension_dependencies(
p_path, config, [features_wo_arch, arch_tag](String p_feature) { return features_wo_arch.has(p_feature) || (p_feature == arch_tag); });
for (const SharedObject &shared_object : dependencies_shared_objects) {
_add_shared_object(shared_object);
}
Expand Down
17 changes: 5 additions & 12 deletions editor/export/shader_baker_export_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,13 @@ bool ShaderBakerExportPlugin::_is_active(const Vector<String> &p_features) const
return RendererSceneRenderRD::get_singleton() != nullptr && RendererRD::MaterialStorage::get_singleton() != nullptr && p_features.has("shader_baker");
}

bool ShaderBakerExportPlugin::_initialize_container_format(const Ref<EditorExportPlatform> &p_platform, const Vector<String> &p_features, const Ref<EditorExportPreset> &p_preset) {
Variant driver_variant = GLOBAL_GET("rendering/rendering_device/driver." + p_platform->get_os_name().to_lower());
if (!driver_variant.is_string()) {
driver_variant = GLOBAL_GET("rendering/rendering_device/driver");
if (!driver_variant.is_string()) {
return false;
}
}

shader_container_driver = driver_variant;
bool ShaderBakerExportPlugin::_initialize_container_format(const Ref<EditorExportPlatform> &p_platform, const Ref<EditorExportPreset> &p_preset) {
shader_container_driver = p_preset->get_project_setting("rendering/rendering_device/driver");
ERR_FAIL_COND_V_MSG(shader_container_driver.is_empty(), false, "Invalid `rendering/rendering_device/driver` setting, disabling shader baking.");

for (Ref<ShaderBakerExportPluginPlatform> platform : platforms) {
if (platform->matches_driver(shader_container_driver)) {
shader_container_format = platform->create_shader_container_format(p_platform, get_export_preset());
shader_container_format = platform->create_shader_container_format(p_platform, p_preset);
ERR_FAIL_NULL_V_MSG(shader_container_format, false, "Unable to create shader container format for the export platform.");
return true;
}
Expand Down Expand Up @@ -99,7 +92,7 @@ bool ShaderBakerExportPlugin::_begin_customize_resources(const Ref<EditorExportP
return false;
}

if (!_initialize_container_format(p_platform, p_features, get_export_preset())) {
if (!_initialize_container_format(p_platform, get_export_preset())) {
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion editor/export/shader_baker_export_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class ShaderBakerExportPlugin : public EditorExportPlugin {

virtual String get_name() const override;
virtual bool _is_active(const Vector<String> &p_features) const;
virtual bool _initialize_container_format(const Ref<EditorExportPlatform> &p_platform, const Vector<String> &p_features, const Ref<EditorExportPreset> &p_preset);
virtual bool _initialize_container_format(const Ref<EditorExportPlatform> &p_platform, const Ref<EditorExportPreset> &p_preset);
virtual void _cleanup_container_format();
virtual bool _initialize_cache_directory();
virtual bool _begin_customize_resources(const Ref<EditorExportPlatform> &p_platform, const Vector<String> &p_features) override;
Expand Down
13 changes: 8 additions & 5 deletions methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -724,11 +724,14 @@ def get_compiler_version(env):
version = subprocess.check_output(args, encoding="utf-8").strip()
for line in version.splitlines():
split = line.split(":", 1)
if split[0] == "catalog_productDisplayVersion":
sem_ver = split[1].split(".")
ret["major"] = int(sem_ver[0])
ret["minor"] = int(sem_ver[1])
ret["patch"] = int(sem_ver[2].split()[0])
if split[0] == "catalog_productSemanticVersion":
match = re.match(r" ([0-9]*).([0-9]*).([0-9]*)-?([a-z0-9.+]*)", split[1])
if match is not None:
ret["major"] = int(match.group(1))
ret["minor"] = int(match.group(2))
ret["patch"] = int(match.group(3))
# Semantic suffix (i.e. insiders+11116.177)
ret["metadata2"] = match.group(4)
# Could potentially add section for determining preview version, but
# that can wait until metadata is actually used for something.
if split[0] == "catalog_buildVersion":
Expand Down
4 changes: 2 additions & 2 deletions misc/dist/linux/org.godotengine.Godot.appdata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
</p>
</description>
<screenshots>
<screenshot type="default" width="1330" height="720">
<screenshot type="default" width="1279" height="758">
<caption>3D project loaded in the Godot Engine editor</caption>
<image>https://download.tuxfamily.org/godotengine/media/screenshots/editor_3d_fracteed-720p.jpg</image>
<image>https://docs.godotengine.org/en/stable/_images/introduction_editor.webp</image>
</screenshot>
</screenshots>
<url type="homepage">https://godotengine.org</url>
Expand Down
4 changes: 4 additions & 0 deletions modules/basis_universal/SCsub
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ if env["builtin_zstd"]:
env_thirdparty = env_basisu.Clone()
env_thirdparty.disable_warnings()

if not env.msvc:
# Required by upstream for GCC. Enabling also for LLVM-based compilers to be consistent.
env_thirdparty.Append(CCFLAGS=["-fno-strict-aliasing"])

# Disable unneeded features to reduce binary size.
# <https://github.com/BinomialLLC/basis_universal/wiki/How-to-Use-and-Configure-the-Transcoder>
env_thirdparty.Append(
Expand Down
8 changes: 8 additions & 0 deletions platform/android/display_server_android.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,14 @@ void DisplayServerAndroid::notify_surface_changed(int p_width, int p_height) {
}
}

void DisplayServerAndroid::notify_application_paused() {
#if defined(RD_ENABLED)
if (rendering_device) {
rendering_device->update_pipeline_cache();
}
#endif // defined(RD_ENABLED)
}

DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, DisplayServer::WindowMode p_mode, DisplayServer::VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, int64_t p_parent_window, Error &r_error) {
rendering_driver = p_rendering_driver;

Expand Down
1 change: 1 addition & 0 deletions platform/android/display_server_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ class DisplayServerAndroid : public DisplayServer {

void reset_window();
void notify_surface_changed(int p_width, int p_height);
void notify_application_paused();

virtual Point2i mouse_get_position() const override;
virtual BitField<MouseButtonMask> mouse_get_button_state() const override;
Expand Down
2 changes: 1 addition & 1 deletion platform/android/editor/game_menu_utils_jni.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#include "editor/editor_node.h"
#include "editor/run/game_view_plugin.h"

static GameViewPlugin *_get_game_view_plugin() {
_FORCE_INLINE_ static GameViewPlugin *_get_game_view_plugin() {
ERR_FAIL_NULL_V(EditorNode::get_singleton(), nullptr);
ERR_FAIL_NULL_V(EditorNode::get_singleton()->get_editor_main_screen(), nullptr);
return Object::cast_to<GameViewPlugin>(EditorNode::get_singleton()->get_editor_main_screen()->get_plugin_by_name("Game"));
Expand Down
2 changes: 1 addition & 1 deletion platform/android/java/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ android {
defaultConfig {
// The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
aaptOptions {
ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}

ndk {
Expand Down
2 changes: 1 addition & 1 deletion platform/android/java/app/config.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ext.versions = [
minSdk : 24,
// Also update 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
targetSdk : 35,
buildTools : '35.0.0',
buildTools : '35.0.1',
kotlinVersion : '2.1.20',
fragmentVersion : '1.8.6',
nexusPublishVersion: '1.3.0',
Expand Down
Loading