@@ -14,6 +14,10 @@ import com.stslex.atten.convention.configureKsp
1414import org.gradle.api.Plugin
1515import org.gradle.api.Project
1616import org.gradle.kotlin.dsl.configure
17+ import java.io.File
18+ import java.io.FileInputStream
19+ import java.io.InputStreamReader
20+ import java.util.Properties
1721
1822class KMPApplicationConventionPlugin : Plugin <Project > {
1923
@@ -43,5 +47,61 @@ class KMPApplicationConventionPlugin : Plugin<Project> {
4347 versionCode = libs.findVersionInt(" versionCode" )
4448 }
4549 }
50+ configureSigning()
4651 }
52+ }
53+
54+ fun Project.configureSigning () = extensions.configure<ApplicationExtension > {
55+ signingConfigs {
56+ val keystoreProperties = gradleKeystoreProperties(project.rootProject.projectDir)
57+ create(" release" ) {
58+ keyAlias = keystoreProperties.getProperty(" keyAlias" )
59+ keyPassword = keystoreProperties.getProperty(" keyPassword" )
60+ storeFile = project.getFile(keystoreProperties.getProperty(" storeFile" ))
61+ storePassword = keystoreProperties.getProperty(" storePassword" )
62+ }
63+ with (getByName(" debug" )) {
64+ keyAlias = keystoreProperties.getProperty(" keyAlias" )
65+ keyPassword = keystoreProperties.getProperty(" keyPassword" )
66+ storeFile = project.getFile(keystoreProperties.getProperty(" storeFile" ))
67+ storePassword = keystoreProperties.getProperty(" storePassword" )
68+ }
69+ }
70+ buildTypes {
71+ getByName(" release" ) {
72+ isMinifyEnabled = false
73+ proguardFiles(
74+ getDefaultProguardFile(" proguard-android-optimize.txt" ),
75+ " proguard-rules.pro"
76+ )
77+ signingConfig = signingConfigs.getByName(" release" )
78+ isDebuggable = false
79+ }
80+ getByName(" debug" ) {
81+ signingConfig = signingConfigs.getByName(" debug" )
82+ isDebuggable = true
83+ }
84+ }
85+ }
86+
87+
88+ fun Project.getFile (path : String ): File {
89+ val file = File (project.rootProject.projectDir, path)
90+ if (file.isFile) {
91+ return file
92+ } else {
93+ throw IllegalStateException (" ${file.name} is inValid" )
94+ }
95+ }
96+
97+ fun gradleKeystoreProperties (projectRootDir : File ): Properties {
98+ val properties = Properties ()
99+ val localProperties = File (projectRootDir, " keystore.properties" )
100+
101+ if (localProperties.isFile) {
102+ InputStreamReader (FileInputStream (localProperties), Charsets .UTF_8 ).use { reader ->
103+ properties.load(reader)
104+ }
105+ }
106+ return properties
47107}
0 commit comments