gradle 自定义插件之 在apply中动态设置签名信息

152 阅读1分钟
              def flavorParam = ...读取配置
               // 配置签名
                def keystoreFile = generateKeystoreIfNeed(target, flavorParam)
                android.signingConfigs.register(flavorName, {
                    keyAlias keystoreFile.getName()
                    keyPassword keystorePassword
                    storeFile keystoreFile
                    storePassword keystorePassword
                })

生成签名文件

  private File generateKeystoreIfNeed(Project project, FlavorParamsEntity flavorParam) {
        def finalKeystoreSaveFolder = new File(project.projectDir, keystoreSaveFolder)
        if (finalKeystoreSaveFolder.mkdirs()) {
            CommonUtils.log("create keystore save folder succeed")
        }

        // 示例中直接使用渠道名作为签名文件的名字和别名
        // 需要特别定制可以考虑放到FlavorParamsEntity中
        def keystoreFileName = flavorParam.flavorName
        def keystoreFile = new File(finalKeystoreSaveFolder, keystoreFileName)
        if (!keystoreFile.exists()) {
            // 对应用AS生成签名时需要填写的信息
            def dName = "CN=$keystoreFileName, OU=$keystoreFileName, O=$keystoreFileName, L=$keystoreFileName, ST=$keystoreFileName, C=$keystoreFileName"
            // 通过命令行生成签名文件
            project.exec {
                commandLine(
                        "keytool", "-genkey",
                        "-alias", keystoreFileName,
                        "-keypass", keystorePassword,
                        "-keyalg", "RSA",
                        "-validity", "10950",
                        "-keystore", keystoreFile.getAbsolutePath(),
                        "-storepass", keystorePassword,
                        "-dname", dName
                )
            }
        }
        return keystoreFile
    }