在Android的gradle.properties中发布签名

Gna*_*nic 19 build-automation android code-signing gradle

因此,我正在尝试将所有的ant构建脚本转换为gradle,并且除了如何在gradle.properties文件中配置签名之外,我已经能够找到所有这些资源和文档.

ant.properties就像这样:

key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password
Run Code Online (Sandbox Code Playgroud)

但是我如何在gradle中做同样的事情呢?

Xav*_*het 33

在你gradle.properties文件存储作为相同的值ant.properties文件,我认为你必须做的简单的名称,如keyAlias为实例.只需删除点即可.

然后在build.gradle文件中执行以下操作:

android {
    signingConfigs {
        release
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

if (project.hasProperty('keyAlias')) {
    android.signingConfigs.release.keyAlias = keyAlias
}
// do the same for the three other properties
// ...
Run Code Online (Sandbox Code Playgroud)

这样做可以让您灵活地在具有gradle.properties文件的计算机上构建."keyalias"属性只有在存在时才会被读取,因此如果代码不存在则代码不会失败.

如果所有属性都存在,signingConfigs.release将完全配置并将用于在构建期间对apk进行签名.如果它不在那里,APK将被构建但不签名.


Grk*_*eer 22

我能够用以下方法做到这一点.我尝试了@ Xav的解决方案,但如果我没有设置属性,它会在发布验证步骤中抱怨.我确信这是最近的变化,因为框架发生了很大的变化.我只想帮助指出,else最后,我能够强制释放signingConfig为null.现在,签名和未签名的版本都会发生,具体取决于gradle.properties的存在.

signingConfigs {
    release {
        keyAlias = "blue_sleep"
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

if (project.hasProperty('storeFile') &&
        project.hasProperty('storePassword') &&
        project.hasProperty('keyPassword')) {
    android.signingConfigs.release.storeFile = file(storeFile)
    android.signingConfigs.release.storePassword = storePassword
    android.signingConfigs.release.keyPassword = keyPassword
} else {
    android.buildTypes.release.signingConfig = null
}
Run Code Online (Sandbox Code Playgroud)

其他一些有用的注释,如果不希望它位于项目文件夹中,可以将gradle.properties放在〜/ .gradle /中.您还可以storeFile使用如下所示的绝对路径设置属性:storePath=file:///Users/nick/Dropbox/mycompany.keystore


Mor*_*itz 5

受Eugens解决方案的启发,我提出了一个更短的差异.代码必须在android {}任务配置中.

File signFile = rootProject.file('sign.properties')
if (signFile.exists()) {
    Properties p = new Properties()
    p.load(new FileInputStream(signFile))
    signingConfigs {
        releaseConfig {
            storeFile file(p.storeFile)
            storePassword p.storePassword
            keyAlias p.keyAlias
            keyPassword p.keyPassword
        }
    }
    buildTypes.release.signingConfig signingConfigs.releaseConfig
}
Run Code Online (Sandbox Code Playgroud)