diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
index f4db61cb3..20a0394f5 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
@@ -6,15 +6,12 @@ package org.yuzu.yuzu_emu.activities
 import android.app.Activity
 import android.content.Context
 import android.content.Intent
-import android.content.res.Configuration
 import android.graphics.Rect
 import android.hardware.Sensor
 import android.hardware.SensorEvent
 import android.hardware.SensorEventListener
 import android.hardware.SensorManager
-import android.hardware.display.DisplayManager
 import android.os.Bundle
-import android.view.Display
 import android.view.InputDevice
 import android.view.KeyEvent
 import android.view.MotionEvent
@@ -23,7 +20,6 @@ import android.view.View
 import android.view.inputmethod.InputMethodManager
 import androidx.activity.viewModels
 import androidx.appcompat.app.AppCompatActivity
-import androidx.core.content.getSystemService
 import androidx.core.view.WindowCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsControllerCompat
@@ -39,7 +35,6 @@ import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel
 import org.yuzu.yuzu_emu.fragments.EmulationFragment
 import org.yuzu.yuzu_emu.model.Game
 import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
-import org.yuzu.yuzu_emu.utils.EmulationMenuSettings
 import org.yuzu.yuzu_emu.utils.ForegroundService
 import org.yuzu.yuzu_emu.utils.InputHandler
 import org.yuzu.yuzu_emu.utils.NfcReader
@@ -148,11 +143,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
         super.onResume()
         nfcReader.startScanning()
         startMotionSensorListener()
-
-        NativeLibrary.notifyOrientationChange(
-            EmulationMenuSettings.landscapeScreenLayout,
-            getAdjustedRotation()
-        )
     }
 
     override fun onPause() {
@@ -258,24 +248,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
 
     override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
 
-    private fun getAdjustedRotation():Int {
-        val rotation = getSystemService<DisplayManager>()!!.getDisplay(Display.DEFAULT_DISPLAY).rotation
-        val config: Configuration = resources.configuration
-
-        if ((config.screenLayout and Configuration.SCREENLAYOUT_LONG_YES) != 0 ||
-            (config.screenLayout and Configuration.SCREENLAYOUT_LONG_NO) == 0 ||
-            (config.screenLayout and Configuration.SCREENLAYOUT_SIZE_SMALL) != 0) {
-            return rotation
-        }
-        when (rotation) {
-            Surface.ROTATION_0 -> return Surface.ROTATION_90
-            Surface.ROTATION_90 -> return Surface.ROTATION_0
-            Surface.ROTATION_180 -> return Surface.ROTATION_270
-            Surface.ROTATION_270 -> return Surface.ROTATION_180
-        }
-        return rotation
-    }
-
     private fun restoreState(savedInstanceState: Bundle) {
         game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!!
     }
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index 03cb0b74b..7ebed5e6a 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -94,14 +94,6 @@ public:
         m_native_window = native_window;
     }
 
-    u32 ScreenRotation() const {
-        return m_screen_rotation;
-    }
-
-    void SetScreenRotation(u32 screen_rotation) {
-        m_screen_rotation = screen_rotation;
-    }
-
     void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir,
                              const std::string& custom_driver_name,
                              const std::string& file_redirect_dir) {
@@ -400,7 +392,6 @@ private:
     // Window management
     std::unique_ptr<EmuWindow_Android> m_window;
     ANativeWindow* m_native_window{};
-    u32 m_screen_rotation{};
 
     // Core emulation
     Core::System m_system;
@@ -426,10 +417,6 @@ private:
 
 } // Anonymous namespace
 
-u32 GetAndroidScreenRotation() {
-    return EmulationSession::GetInstance().ScreenRotation();
-}
-
 static Core::SystemResultStatus RunEmulation(const std::string& filepath) {
     Common::Log::Initialize();
     Common::Log::SetColorConsoleBackendEnabled(true);
@@ -473,13 +460,6 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceDestroyed(JNIEnv* env,
     EmulationSession::GetInstance().SurfaceChanged();
 }
 
-void Java_org_yuzu_yuzu_1emu_NativeLibrary_notifyOrientationChange(JNIEnv* env,
-                                                                   [[maybe_unused]] jclass clazz,
-                                                                   jint layout_option,
-                                                                   jint rotation) {
-    return EmulationSession::GetInstance().SetScreenRotation(static_cast<u32>(rotation));
-}
-
 void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env,
                                                            [[maybe_unused]] jclass clazz,
                                                            jstring j_directory) {
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
index aa8e54bdc..acb143fc7 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
@@ -37,10 +37,6 @@
 #include "video_core/vulkan_common/vulkan_memory_allocator.h"
 #include "video_core/vulkan_common/vulkan_wrapper.h"
 
-#ifdef ANDROID
-extern u32 GetAndroidScreenRotation();
-#endif
-
 namespace Vulkan {
 
 namespace {
@@ -78,47 +74,6 @@ struct ScreenRectVertex {
     }
 };
 
-#ifdef ANDROID
-
-std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
-    constexpr u32 ROTATION_0 = 0;
-    constexpr u32 ROTATION_90 = 1;
-    constexpr u32 ROTATION_180 = 2;
-    constexpr u32 ROTATION_270 = 3;
-
-    // clang-format off
-    switch (GetAndroidScreenRotation()) {
-        case ROTATION_0:
-            // Desktop
-            return { 2.f / width, 0.f,          0.f, 0.f,
-                     0.f,         2.f / height, 0.f, 0.f,
-                     0.f,         0.f,          1.f, 0.f,
-                    -1.f,        -1.f,          0.f, 1.f};
-        case ROTATION_180:
-            // Reverse desktop
-            return {-2.f / width, 0.f,          0.f, 0.f,
-                     0.f,        -2.f / height, 0.f, 0.f,
-                     0.f,         0.f,          1.f, 0.f,
-                     1.f,         1.f,          0.f, 1.f};
-        case ROTATION_270:
-            // Reverse landscape
-            return { 0.f,         -2.f / width, 0.f, 0.f,
-                     2.f / height, 0.f,         0.f, 0.f,
-                     0.f,          0.f,         1.f, 0.f,
-                    -1.f,          1.f,         0.f, 1.f};
-        case ROTATION_90:
-        default:
-            // Landscape
-            return { 0.f,          2.f / width, 0.f, 0.f,
-                    -2.f / height, 0.f,         0.f, 0.f,
-                     0.f,          0.f,         1.f, 0.f,
-                     1.f,         -1.f,         0.f, 1.f};
-    }
-    // clang-format on
-}
-
-#else
-
 std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
     // clang-format off
     return { 2.f / width, 0.f,          0.f, 0.f,
@@ -128,8 +83,6 @@ std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
     // clang-format on
 }
 
-#endif
-
 u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) {
     using namespace VideoCore::Surface;
     return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format));
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index afcf34fba..d3cddac69 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -231,7 +231,12 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, bo
         .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,
         .queueFamilyIndexCount = 0,
         .pQueueFamilyIndices = nullptr,
+#ifdef ANDROID
+        // On Android, do not allow surface rotation to deviate from the frontend.
+        .preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
+#else
         .preTransform = capabilities.currentTransform,
+#endif
         .compositeAlpha = alpha_flags,
         .presentMode = present_mode,
         .clipped = VK_FALSE,