diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts
index fe79a701ce2aafd251fa7facf0a998e9732ee8e6..431f899b3bca0e5a1bad9c3c073dff56401f3621 100644
--- a/src/android/app/build.gradle.kts
+++ b/src/android/app/build.gradle.kts
@@ -77,13 +77,30 @@ android {
         buildConfigField("String", "BRANCH", "\"${getBranch()}\"")
     }
 
+    val keystoreFile = System.getenv("ANDROID_KEYSTORE_FILE")
+    if (keystoreFile != null) {
+        signingConfigs {
+            create("release") {
+                storeFile = file(keystoreFile)
+                storePassword = System.getenv("ANDROID_KEYSTORE_PASS")
+                keyAlias = System.getenv("ANDROID_KEY_ALIAS")
+                keyPassword = System.getenv("ANDROID_KEYSTORE_PASS")
+            }
+        }
+    }
+
     // Define build types, which are orthogonal to product flavors.
     buildTypes {
 
         // Signed by release key, allowing for upload to Play Store.
         release {
+            signingConfig = if (keystoreFile != null) {
+                signingConfigs.getByName("release")
+            } else {
+                signingConfigs.getByName("debug")
+            }
+
             resValue("string", "app_name_suffixed", "yuzu")
-            signingConfig = signingConfigs.getByName("debug")
             isMinifyEnabled = true
             isDebuggable = false
             proguardFiles(