| 976 | } |
| 977 | |
| 978 | fun signApk(apkFile: File) { |
| 979 | project.logger.lifecycle("Signing APK: ${apkFile.name}") |
| 980 | |
| 981 | val isWindows = System.getProperty("os.name").lowercase().contains("windows") |
| 982 | var signerExec = "apksigner" |
| 983 | if (isWindows) { |
| 984 | signerExec = "apksigner.bat" |
| 985 | } |
| 986 | |
| 987 | val signingConfig = |
| 988 | android.signingConfigs.findByName("common") |
| 989 | ?: android.signingConfigs.getByName("debug") |
| 990 | |
| 991 | project.logger.lifecycle("Signing Config: ${signingConfig.name}") |
| 992 | |
| 993 | val keystorePath = signingConfig.storeFile?.absolutePath ?: error("Keystore not found!") |
| 994 | val keystorePassword = signingConfig.storePassword ?: error("Keystore password missing!") |
| 995 | val keyAlias = signingConfig.keyAlias ?: error("Key alias missing!") |
| 996 | val keyPassword = signingConfig.keyPassword ?: error("Key password missing!") |
| 997 | |
| 998 | val androidSdkDir = android.sdkDirectory.absolutePath |
| 999 | val apkSignerPath: File = |
| 1000 | File(androidSdkDir, "build-tools") |
| 1001 | .listFiles() |
| 1002 | ?.filter { it.isDirectory && File(it, signerExec).exists() } |
| 1003 | ?.maxByOrNull { it.name } // pick the highest version |
| 1004 | ?.resolve(signerExec) |
| 1005 | ?: error("Could not find apksigner in any build-tools directory") |
| 1006 | |
| 1007 | project.logger.lifecycle("APK Signer: ${apkSignerPath.absolutePath}") |
| 1008 | |
| 1009 | ant.withGroovyBuilder { |
| 1010 | "exec"( |
| 1011 | "executable" to apkSignerPath.absolutePath, |
| 1012 | "failonerror" to "true", |
| 1013 | ) { |
| 1014 | "arg"("value" to "sign") |
| 1015 | "arg"("value" to "--v3-signing-enabled") |
| 1016 | "arg"("value" to "true") |
| 1017 | "arg"("value" to "--v2-signing-enabled") |
| 1018 | "arg"("value" to "true") |
| 1019 | "arg"("value" to "--ks") |
| 1020 | "arg"("value" to keystorePath) |
| 1021 | "arg"("value" to "--ks-key-alias") |
| 1022 | "arg"("value" to keyAlias) |
| 1023 | "arg"("value" to "--ks-pass") |
| 1024 | "arg"("value" to "pass:$keystorePassword") |
| 1025 | "arg"("value" to "--key-pass") |
| 1026 | "arg"("value" to "pass:$keyPassword") |
| 1027 | "arg"("value" to apkFile.absolutePath) |
| 1028 | } |
| 1029 | } |
| 1030 | } |
| 1031 | |
| 1032 | val scpServer: String = propOrEnv("SCP_HOST") |
| 1033 |
no test coverage detected