diff options
| author | crueter <crueter@eden-emu.dev> | 2026-09-02 00:29:58 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-09-02 00:29:58 +0200 |
| commit | aa4e494c08075f5d048e8e3d6e0f7426d88d0f0a (patch) | |
| tree | 3055c96bf4c84efcc24f768acc4545c1147f5c2d /src/android | |
| parent | 858f9e5aeac89503c331dfe4588cc3c83ab2223b (diff) | |
[android] Replace Oboe audio with SDL3 audio (#4338)
Supersedes #4335.
Replaces the Oboe audio backend with SDL3, since we already support it.
A few caveats:
- SDL defines a JVM OnLoad method already, so we have to instead hijack
NativeLibrary for id_cache initialization
- This also means some internal fields in Double/Integer/Boolean (namely
`value`) can't be accessed, so I switched those to methods for now.
- SDL Java sources are pulled in from the CI package.
- Since we can't use SDLActivity, `SDL.setupJNI()` handles everything
Signed-off-by: crueter <crueter@eden-emu.dev>
- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.
-------------------
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4338
Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src/android')
| -rw-r--r-- | src/android/app/build.gradle.kts | 7 | ||||
| -rw-r--r-- | src/android/app/proguard-rules.pro | 3 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt | 4 | ||||
| -rw-r--r-- | src/android/app/src/main/jni/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/android/app/src/main/jni/native.cpp | 9 | ||||
| -rw-r--r-- | src/android/app/src/main/res/values-fa/strings.xml | 1 | ||||
| -rw-r--r-- | src/android/app/src/main/res/values/arrays.xml | 4 | ||||
| -rw-r--r-- | src/android/app/src/main/res/values/strings.xml | 2 |
8 files changed, 27 insertions, 5 deletions
diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index 0cef7e7196..3ae6d73994 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -272,6 +272,13 @@ android { resValue("string", "app_name_suffixed", "$currentName$suffix") resValue("string", "app_name", "Eden$suffix") } + + sourceSets { + named("main") { + java.srcDir("${edenDir}/externals/generated/sdl/java") + kotlin.srcDir("${edenDir}/externals/generated/sdl/java") + } + } } idea { diff --git a/src/android/app/proguard-rules.pro b/src/android/app/proguard-rules.pro index 691e08fd03..91f63bbb84 100644 --- a/src/android/app/proguard-rules.pro +++ b/src/android/app/proguard-rules.pro @@ -9,6 +9,9 @@ -keep class org.ini4j.spi.IniBuilder -keep class org.ini4j.spi.IniFormatter +-keep class org.libsdl.app.** { *; } +-keepclassmembers class org.libsdl.app.** { *; } + # Suppress warnings for R8 -dontwarn org.bouncycastle.jsse.BCSSLParameters -dontwarn org.bouncycastle.jsse.BCSSLSocket diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 4b46dd76a2..77222884c6 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -16,6 +16,7 @@ import android.widget.TextView import androidx.annotation.Keep import androidx.core.net.toUri import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.libsdl.app.SDL import java.lang.ref.WeakReference import org.yuzu.yuzu_emu.activities.EmulationActivity import org.yuzu.yuzu_emu.fragments.CoreErrorDialogFragment @@ -52,6 +53,8 @@ object NativeLibrary { init { try { System.loadLibrary("yuzu-android") + SDL.setupJNI() + initJvm() } catch (ex: UnsatisfiedLinkError) { error("[NativeLibrary] $ex") } @@ -367,6 +370,7 @@ object NativeLibrary { NetPlayManager.clearChat() } + external fun initJvm() external fun initMultiplayer() @Keep diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt index 7013691765..86c05d7c0d 100644 --- a/src/android/app/src/main/jni/CMakeLists.txt +++ b/src/android/app/src/main/jni/CMakeLists.txt @@ -22,7 +22,7 @@ add_library(yuzu-android SHARED set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR}) target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common video_core) -target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log) +target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log GLESv2) if (ARCHITECTURE_arm64) target_link_libraries(yuzu-android PRIVATE adrenotools) endif() diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 9fc550985a..423edc2c1b 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -1730,6 +1730,15 @@ jint Java_org_yuzu_yuzu_1emu_NativeLibrary_loadAmiibo(JNIEnv* env, jobject jobj, return static_cast<jint>(info); } +extern "C" JNIEXPORT void JNICALL +Java_org_yuzu_yuzu_1emu_NativeLibrary_initJvm(JNIEnv *env, jclass clazz) { + JavaVM *vm; + if (env->GetJavaVM(&vm) != JNI_OK) + return; + + Common::Android::Initialize(vm, env); +} + JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_initMultiplayer( JNIEnv* env, [[maybe_unused]] jobject obj) { diff --git a/src/android/app/src/main/res/values-fa/strings.xml b/src/android/app/src/main/res/values-fa/strings.xml index 98b94d166d..6b40d97f2a 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -800,7 +800,6 @@ <string name="theme_mode_dark">تاریک</string> <!-- Audio output engines --> - <string name="oboe">oboe</string> <string name="cubeb">cubeb</string> <!-- Anisotropic filtering options --> diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index b1c0a98a61..931cf2bfa7 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -465,13 +465,13 @@ <string-array name="outputEngineEntries"> <item>@string/auto</item> - <item>@string/oboe</item> + <item>@string/sdl3</item> <item>@string/cubeb</item> <item>@string/string_null</item> </string-array> <integer-array name="outputEngineValues"> <item>0</item> - <item>4</item> + <item>2</item> <item>1</item> <item>3</item> </integer-array> diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 3f6d1889ff..55783f6e43 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1240,7 +1240,7 @@ <string name="theme_mode_dark">Dark</string> <!-- Audio output engines --> - <string name="oboe" translatable="false">oboe</string> + <string name="sdl3" translatable="false">SDL3</string> <string name="cubeb" translatable="false">cubeb</string> <!-- Anisotropic filtering options --> |
