diff --git a/gradle/convention/build.gradle.kts b/gradle/convention/build.gradle.kts
index f6940cf74d0b32d679a736741b04e9efcaba91fa..99399c857f0fef2ea1b39fdc2a71749033d5bf9a 100644
--- a/gradle/convention/build.gradle.kts
+++ b/gradle/convention/build.gradle.kts
@@ -32,6 +32,10 @@ gradlePlugin {
       id = "justjanne.kotlin"
       implementationClass = "KotlinConvention"
     }
+    register("signing") {
+      id = "justjanne.signing"
+      implementationClass = "SigningConvention"
+    }
   }
 }
 
diff --git a/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt b/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
index 35de208b5741ec86c6a7cc91e6a26650852189eb..5f424cb7376ad7b33c750060dd1a205190ccb0d0 100644
--- a/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
+++ b/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
@@ -4,7 +4,6 @@ import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.kotlin.dsl.configure
 import util.git
-import util.properties
 import java.util.Locale
 
 class AndroidApplicationConvention : Plugin<Project> {
@@ -13,6 +12,7 @@ class AndroidApplicationConvention : Plugin<Project> {
       with(pluginManager) {
         apply("com.android.application")
         apply("justjanne.kotlin.android")
+        apply("justjanne.signing")
       }
 
       extensions.configure<ApplicationExtension> {
@@ -49,17 +49,6 @@ class AndroidApplicationConvention : Plugin<Project> {
           buildConfig = true
         }
 
-        signingConfigs {
-          SigningData.of(project.rootProject.properties("signing.properties"))?.let {
-            create("default") {
-              storeFile = file(it.storeFile)
-              storePassword = it.storePassword
-              keyAlias = it.keyAlias
-              keyPassword = it.keyPassword
-            }
-          }
-        }
-
         compileOptions {
           sourceCompatibility = JavaVersion.VERSION_11
           targetCompatibility = JavaVersion.VERSION_11
diff --git a/gradle/convention/src/main/kotlin/SigningConvention.kt b/gradle/convention/src/main/kotlin/SigningConvention.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d2813f220a960c3251c37c2945cbeeee2ddfa0e9
--- /dev/null
+++ b/gradle/convention/src/main/kotlin/SigningConvention.kt
@@ -0,0 +1,29 @@
+import com.android.build.api.dsl.ApplicationExtension
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.configure
+import util.properties
+
+class SigningConvention : Plugin<Project> {
+  override fun apply(target: Project) {
+    with(target) {
+      with(pluginManager) {
+        apply("com.android.application")
+        apply("justjanne.kotlin.android")
+      }
+
+      extensions.configure<ApplicationExtension> {
+        signingConfigs {
+          SigningData.of(rootProject.properties("signing.properties"))?.let {
+            create("default") {
+              storeFile = file(it.storeFile)
+              storePassword = it.storePassword
+              keyAlias = it.keyAlias
+              keyPassword = it.keyPassword
+            }
+          }
+        }
+      }
+    }
+  }
+}