diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.java
deleted file mode 100644
index 822a3f1f9..000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.yuzu.yuzu_emu.utils;
-
-import android.content.Context;
-import android.net.Uri;
-
-import org.yuzu.yuzu_emu.NativeLibrary;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-public class GpuDriverHelper {
-    private static final String META_JSON_FILENAME = "meta.json";
-    private static final String DRIVER_INTERNAL_FILENAME = "gpu_driver.zip";
-    private static String fileRedirectionPath;
-    private static String driverInstallationPath;
-    private static String hookLibPath;
-
-    private static void unzip(String zipFilePath, String destDir) throws IOException {
-        File dir = new File(destDir);
-
-        // Create output directory if it doesn't exist
-        if (!dir.exists()) dir.mkdirs();
-
-        // Unpack the files.
-        ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath));
-        byte[] buffer = new byte[1024];
-        ZipEntry ze = zis.getNextEntry();
-        while (ze != null) {
-            String fileName = ze.getName();
-            File newFile = new File(destDir + fileName);
-            newFile.getParentFile().mkdirs();
-            FileOutputStream fos = new FileOutputStream(newFile);
-            int len;
-            while ((len = zis.read(buffer)) > 0) {
-                fos.write(buffer, 0, len);
-            }
-            fos.close();
-            zis.closeEntry();
-            ze = zis.getNextEntry();
-        }
-        zis.closeEntry();
-    }
-
-    public static void initializeDriverParameters(Context context) {
-        try {
-            // Initialize the file redirection directory.
-            fileRedirectionPath = context.getExternalFilesDir(null).getCanonicalPath() + "/gpu/vk_file_redirect/";
-
-            // Initialize the driver installation directory.
-            driverInstallationPath = context.getFilesDir().getCanonicalPath() + "/gpu_driver/";
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        // Initialize directories.
-        initializeDirectories();
-
-        // Initialize hook libraries directory.
-        hookLibPath = context.getApplicationInfo().nativeLibraryDir + "/";
-
-        // Initialize GPU driver.
-        NativeLibrary.InitializeGpuDriver(hookLibPath, driverInstallationPath, getCustomDriverLibraryName(), fileRedirectionPath);
-    }
-
-    public static void installDefaultDriver(Context context) {
-        // Removing the installed driver will result in the backend using the default system driver.
-        File driverInstallationDir = new File(driverInstallationPath);
-        deleteRecursive(driverInstallationDir);
-        initializeDriverParameters(context);
-    }
-
-    public static void installCustomDriver(Context context, Uri driverPathUri) {
-        // Revert to system default in the event the specified driver is bad.
-        installDefaultDriver(context);
-
-        // Ensure we have directories.
-        initializeDirectories();
-
-        // Copy the zip file URI into our private storage.
-        FileUtil.copyUriToInternalStorage(context, driverPathUri, driverInstallationPath, DRIVER_INTERNAL_FILENAME);
-
-        // Unzip the driver.
-        try {
-            unzip(driverInstallationPath + DRIVER_INTERNAL_FILENAME, driverInstallationPath);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        // Initialize the driver parameters.
-        initializeDriverParameters(context);
-    }
-
-    public static String getCustomDriverName() {
-        // Parse the custom driver metadata to retrieve the name.
-        GpuDriverMetadata metadata = new GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME);
-        return metadata.name;
-    }
-
-    private static String getCustomDriverLibraryName() {
-        // Parse the custom driver metadata to retrieve the library name.
-        GpuDriverMetadata metadata = new GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME);
-        return metadata.libraryName;
-    }
-
-    private static void initializeDirectories() {
-        // Ensure the file redirection directory exists.
-        File fileRedirectionDir = new File(fileRedirectionPath);
-        if (!fileRedirectionDir.exists()) {
-            fileRedirectionDir.mkdirs();
-        }
-        // Ensure the driver installation directory exists.
-        File driverInstallationDir = new File(driverInstallationPath);
-        if (!driverInstallationDir.exists()) {
-            driverInstallationDir.mkdirs();
-        }
-    }
-
-    private static void deleteRecursive(File fileOrDirectory) {
-        if (fileOrDirectory.isDirectory()) {
-            for (File child : fileOrDirectory.listFiles()) {
-                deleteRecursive(child);
-            }
-        }
-        fileOrDirectory.delete();
-    }
-}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt
new file mode 100644
index 000000000..399491ffb
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt
@@ -0,0 +1,145 @@
+package org.yuzu.yuzu_emu.utils
+
+import android.content.Context
+import android.net.Uri
+import org.yuzu.yuzu_emu.NativeLibrary
+import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import java.io.IOException
+import java.util.zip.ZipInputStream
+
+object GpuDriverHelper {
+    private const val META_JSON_FILENAME = "meta.json"
+    private const val DRIVER_INTERNAL_FILENAME = "gpu_driver.zip"
+    private var fileRedirectionPath: String? = null
+    private var driverInstallationPath: String? = null
+    private var hookLibPath: String? = null
+
+    @Throws(IOException::class)
+    private fun unzip(zipFilePath: String, destDir: String) {
+        val dir = File(destDir)
+
+        // Create output directory if it doesn't exist
+        if (!dir.exists()) dir.mkdirs()
+
+        // Unpack the files.
+        val zis = ZipInputStream(FileInputStream(zipFilePath))
+        val buffer = ByteArray(1024)
+        var ze = zis.nextEntry
+        while (ze != null) {
+            val fileName = ze.name
+            val newFile = File(destDir + fileName)
+            newFile.parentFile!!.mkdirs()
+            val fos = FileOutputStream(newFile)
+            var len: Int
+            while (zis.read(buffer).also { len = it } > 0) {
+                fos.write(buffer, 0, len)
+            }
+            fos.close()
+            zis.closeEntry()
+            ze = zis.nextEntry
+        }
+        zis.closeEntry()
+    }
+
+    @JvmStatic
+    fun initializeDriverParameters(context: Context) {
+        try {
+            // Initialize the file redirection directory.
+            fileRedirectionPath =
+                context.getExternalFilesDir(null)!!.canonicalPath + "/gpu/vk_file_redirect/"
+
+            // Initialize the driver installation directory.
+            driverInstallationPath = context.filesDir.canonicalPath + "/gpu_driver/"
+        } catch (e: IOException) {
+            throw RuntimeException(e)
+        }
+
+        // Initialize directories.
+        initializeDirectories()
+
+        // Initialize hook libraries directory.
+        hookLibPath = context.applicationInfo.nativeLibraryDir + "/"
+
+        // Initialize GPU driver.
+        NativeLibrary.InitializeGpuDriver(
+            hookLibPath,
+            driverInstallationPath,
+            customDriverLibraryName,
+            fileRedirectionPath
+        )
+    }
+
+    fun installDefaultDriver(context: Context) {
+        // Removing the installed driver will result in the backend using the default system driver.
+        val driverInstallationDir = File(driverInstallationPath!!)
+        deleteRecursive(driverInstallationDir)
+        initializeDriverParameters(context)
+    }
+
+    fun installCustomDriver(context: Context, driverPathUri: Uri?) {
+        // Revert to system default in the event the specified driver is bad.
+        installDefaultDriver(context)
+
+        // Ensure we have directories.
+        initializeDirectories()
+
+        // Copy the zip file URI into our private storage.
+        copyUriToInternalStorage(
+            context,
+            driverPathUri,
+            driverInstallationPath!!,
+            DRIVER_INTERNAL_FILENAME
+        )
+
+        // Unzip the driver.
+        try {
+            unzip(driverInstallationPath + DRIVER_INTERNAL_FILENAME, driverInstallationPath!!)
+        } catch (e: IOException) {
+            throw RuntimeException(e)
+        }
+
+        // Initialize the driver parameters.
+        initializeDriverParameters(context)
+    }
+
+    // Parse the custom driver metadata to retrieve the name.
+    val customDriverName: String?
+        get() {
+            // Parse the custom driver metadata to retrieve the name.
+            val metadata = GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME)
+            return metadata.name
+        }
+
+    // Parse the custom driver metadata to retrieve the library name.
+    private val customDriverLibraryName: String?
+        get() {
+            // Parse the custom driver metadata to retrieve the library name.
+            val metadata = GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME)
+            return metadata.libraryName
+        }
+
+    private fun initializeDirectories() {
+        // Ensure the file redirection directory exists.
+        val fileRedirectionDir = File(fileRedirectionPath!!)
+        if (!fileRedirectionDir.exists()) {
+            fileRedirectionDir.mkdirs()
+        }
+        // Ensure the driver installation directory exists.
+        val driverInstallationDir = File(driverInstallationPath!!)
+        if (!driverInstallationDir.exists()) {
+            driverInstallationDir.mkdirs()
+        }
+    }
+
+    private fun deleteRecursive(fileOrDirectory: File) {
+        if (fileOrDirectory.isDirectory) {
+            for (child in fileOrDirectory.listFiles()!!) {
+                deleteRecursive(child)
+            }
+        }
+        fileOrDirectory.delete()
+    }
+}