summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimonx22 <simon@oatmealdome.me>2026-07-12 10:17:29 -0400
committerSimonx22 <simon@oatmealdome.me>2026-07-12 10:17:39 -0400
commitaeb3fec03aa31fbd14420c10653b27999feffc7d (patch)
tree0088a7a75a00324f52cda337814ec2f38133dd86
parent6de526c684ee6dd8b6fc3447dae858ae480ccbb5 (diff)
Android: Update dependencies and build tools
Update Android dependencies and build tools to their latest available versions. Rename the GameCube save magic constant to avoid a collision with the NDK 30 ARM64 signal context header.
-rw-r--r--Source/Android/app/build.gradle.kts12
-rw-r--r--Source/Android/benchmark/build.gradle.kts4
-rw-r--r--Source/Android/gradle.properties2
-rw-r--r--Source/Android/gradle/libs.versions.toml20
-rw-r--r--Source/Android/gradle/wrapper/gradle-wrapper.jarbin48966 -> 48462 bytes
-rw-r--r--Source/Android/gradle/wrapper/gradle-wrapper.properties4
-rwxr-xr-xSource/Android/gradlew6
-rw-r--r--Source/Android/gradlew.bat175
-rw-r--r--Source/Android/settings.gradle.kts15
-rw-r--r--Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp6
10 files changed, 107 insertions, 137 deletions
diff --git a/Source/Android/app/build.gradle.kts b/Source/Android/app/build.gradle.kts
index 11473af09f..64abfd0037 100644
--- a/Source/Android/app/build.gradle.kts
+++ b/Source/Android/app/build.gradle.kts
@@ -7,8 +7,8 @@ plugins {
@Suppress("UnstableApiUsage")
android {
- compileSdk = 36
- ndkVersion = "29.0.14206865"
+ compileSdk = 37
+ ndkVersion = "30.0.15729638"
buildFeatures {
compose = true
@@ -38,7 +38,7 @@ android {
defaultConfig {
applicationId = "org.dolphinemu.dolphinemu"
minSdk = 24
- targetSdk = 36
+ targetSdk = 37
versionCode = getBuildVersionCode()
@@ -118,12 +118,6 @@ android {
}
}
-kotlin {
- compilerOptions {
- freeCompilerArgs.add("-Xannotation-default-target=param-property")
- }
-}
-
dependencies {
baselineProfile(project(":benchmark"))
coreLibraryDesugaring(libs.desugar.jdk.libs)
diff --git a/Source/Android/benchmark/build.gradle.kts b/Source/Android/benchmark/build.gradle.kts
index 21efb6a0d6..2244eb8399 100644
--- a/Source/Android/benchmark/build.gradle.kts
+++ b/Source/Android/benchmark/build.gradle.kts
@@ -7,7 +7,7 @@ plugins {
android {
namespace = "org.dolphinemu.baselineprofile"
- compileSdk = 36
+ compileSdk = 37
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
@@ -16,7 +16,7 @@ android {
defaultConfig {
minSdk = 28
- targetSdk = 36
+ targetSdk = 37
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/Source/Android/gradle.properties b/Source/Android/gradle.properties
index 42e35cc911..7449fbed0b 100644
--- a/Source/Android/gradle.properties
+++ b/Source/Android/gradle.properties
@@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
android.enableJetifier=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
diff --git a/Source/Android/gradle/libs.versions.toml b/Source/Android/gradle/libs.versions.toml
index f9c4992ccd..a4311b8e5a 100644
--- a/Source/Android/gradle/libs.versions.toml
+++ b/Source/Android/gradle/libs.versions.toml
@@ -1,31 +1,31 @@
[versions]
-agp = "9.1.0"
+agp = "9.2.1"
appcompat = "1.7.1"
-benchmarkMacroJunit4 = "1.5.0-alpha04"
+benchmarkMacroJunit4 = "1.5.0-alpha07"
cardview = "1.0.0"
coil = "2.7.0"
-compose-bom = "2026.04.01"
+compose-bom = "2026.06.01"
constraintlayout = "2.2.1"
-coreKtx = "1.18.0"
+coreKtx = "1.19.0"
coreSplashscreen = "1.2.0"
desugar_jdk_libs = "2.1.5"
espressoCore = "3.7.0"
filepicker = "4.2.1"
fragmentKtx = "1.8.9"
junit = "1.3.0"
-kotlin = "2.3.20"
-kotlinxCoroutinesAndroid = "1.10.2"
-kotlinxSerializationJson = "1.10.0"
+kotlin = "2.4.0"
+kotlinxCoroutinesAndroid = "1.11.0"
+kotlinxSerializationJson = "1.11.0"
leanback = "1.2.0"
-lifecycle = "2.10.0"
-material = "1.13.0"
+lifecycle = "2.11.0"
+material = "1.14.0"
preferenceKtx = "1.2.1"
profileinstaller = "1.4.1"
recyclerview = "1.4.0"
slidingpanelayout = "1.2.0"
swiperefreshlayout = "1.2.0"
tvprovider = "1.1.0"
-uiautomator = "2.3.0"
+uiautomator = "2.4.0"
[libraries]
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose" }
diff --git a/Source/Android/gradle/wrapper/gradle-wrapper.jar b/Source/Android/gradle/wrapper/gradle-wrapper.jar
index d997cfc60f..b1b8ef56b4 100644
--- a/Source/Android/gradle/wrapper/gradle-wrapper.jar
+++ b/Source/Android/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/Source/Android/gradle/wrapper/gradle-wrapper.properties b/Source/Android/gradle/wrapper/gradle-wrapper.properties
index c61a118f7d..a9db11550c 100644
--- a/Source/Android/gradle/wrapper/gradle-wrapper.properties
+++ b/Source/Android/gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
networkTimeout=10000
+retries=0
+retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/Source/Android/gradlew b/Source/Android/gradlew
index 0262dcbd52..249efbb032 100755
--- a/Source/Android/gradlew
+++ b/Source/Android/gradlew
@@ -20,7 +20,7 @@
##############################################################################
#
-# Gradle start up script for POSIX generated by Gradle.
+# gradlew start up script for POSIX generated by Gradle.
#
# Important for running:
#
@@ -29,7 +29,7 @@
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
-# ksh Gradle
+# ksh gradlew
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
diff --git a/Source/Android/gradlew.bat b/Source/Android/gradlew.bat
index e509b2dd8f..a51ec4f588 100644
--- a/Source/Android/gradlew.bat
+++ b/Source/Android/gradlew.bat
@@ -1,93 +1,82 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-@rem SPDX-License-Identifier: Apache-2.0
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem gradlew startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables, and ensure extensions are enabled
+setlocal EnableExtensions
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+"%COMSPEC%" /c exit 1
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+"%COMSPEC%" /c exit 1
+
+:execute
+@rem Setup the command line
+
+
+
+@rem Execute gradlew
+@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
+@rem which allows us to clear the local environment before executing the java command
+endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
+
+:exitWithErrorLevel
+@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
+"%COMSPEC%" /c exit %ERRORLEVEL%
diff --git a/Source/Android/settings.gradle.kts b/Source/Android/settings.gradle.kts
index 1c44ac6613..1a68f74a48 100644
--- a/Source/Android/settings.gradle.kts
+++ b/Source/Android/settings.gradle.kts
@@ -1,19 +1,4 @@
pluginManagement {
- buildscript {
- repositories {
- mavenCentral()
- maven {
- url = uri("https://storage.googleapis.com/r8-releases/raw")
- }
- }
- dependencies {
- // Temporary override for AGP-bundled R8 crash in release minification.
- // https://issuetracker.google.com/issues/495458806
- // TODO: Re-test without this override when upgrading AGP and remove if fixed upstream.
- classpath("com.android.tools:r8:9.1.34")
- }
- }
-
repositories {
gradlePluginPortal()
google()
diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp b/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp
index c7e0aa06a8..7d097d61e1 100644
--- a/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp
+++ b/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp
@@ -21,7 +21,7 @@ constexpr std::array<u8, 12> SAV_MAGIC = {0x44, 0x41, 0x54, 0x45, 0x4C, 0x47,
0x43, 0x5F, 0x53, 0x41, 0x56, 0x45}; // "DATELGC_SAVE"
constexpr u32 SAV_HEADER_SIZE = 0xC0;
constexpr u32 SAV_DENTRY_OFFSET = 0x80;
-constexpr std::array<u8, 6> GCS_MAGIC = {0x47, 0x43, 0x53, 0x41, 0x56, 0x45}; // "GCSAVE"
+constexpr std::array<u8, 6> GCS_FILE_MAGIC = {0x47, 0x43, 0x53, 0x41, 0x56, 0x45}; // "GCSAVE"
constexpr u32 GCS_HEADER_SIZE = 0x150;
constexpr u32 GCS_DENTRY_OFFSET = 0x110;
@@ -153,7 +153,7 @@ static std::variant<ReadSavefileErrorCode, Savefile> ReadSavefileInternalGCS(Fil
if (!file.ReadBytes(gcs_header.data(), gcs_header.size()))
return ReadSavefileErrorCode::IOError;
- if (std::memcmp(gcs_header.data(), GCS_MAGIC.data(), GCS_MAGIC.size()) != 0)
+ if (std::memcmp(gcs_header.data(), GCS_FILE_MAGIC.data(), GCS_FILE_MAGIC.size()) != 0)
return ReadSavefileErrorCode::DataCorrupted;
Savefile savefile;
@@ -245,7 +245,7 @@ static bool WriteSavefileInternalGCS(File::IOFile& file, const Savefile& savefil
{
std::array<u8, GCS_HEADER_SIZE> header;
std::memset(header.data(), 0, header.size());
- std::memcpy(header.data(), GCS_MAGIC.data(), GCS_MAGIC.size());
+ std::memcpy(header.data(), GCS_FILE_MAGIC.data(), GCS_FILE_MAGIC.size());
DEntry gcs_entry = savefile.dir_entry;
gcs_entry.m_block_count = 1; // always stored as 1 in GCS files