发布Android版gradle.properties中的签名

所以我试图把我所有的ant构build脚本转换为gradle,并且除了如何在gradle.properties文件中configuration签名以外,我已经能够find足够的资源和文档。

ant.properties是这样的:

key.alias=alias key.store.password=password key.store=keystore.file key.alias.password=password 

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

Solutions Collecting From Web of "发布Android版gradle.properties中的签名"

在你的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 // ... 

这样做使您可以灵活地在具有gradle.properties文件的计算机上构build或不构build。 只有在“keyalias”属性存在的情况下,才会读取“keyalias”属性,如果不存在,代码将不会失败。

如果所有的属性都在那里, signingConfigs.release将被完全configuration,并在构build期间被用来签署apk。 如果它不在那里,那么APK将会被构build但是没有被签名。

我能够做到以下几点。 我尝试了@ Xav的解决scheme,但如果我没有设置属性,它会在发布validation步骤中抱怨。 由于框架的改变,我相信这是一个近期的变化。 我只是想通过指出最后的else来帮助我释放签名configuration为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 } 

其他一些有用的注释,你可以把gradle.properties放在〜/ .gradle /如果你不希望它坐在项目文件夹。 你也可以用这样的绝对path设置storeFile属性: storePath=file:///Users/nick/Dropbox/mycompany.keystore

受到Eugens解决scheme的启发,我想出了一个较短的方差。 代码必须在android {}任务configuration中。

 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 } 

Gradle 1.9不允许你定义属性。 你现在只能把它们添加到分机上。 除了以前的答案:

 signingConfigs { debug { project.ext.loadSign = false } release { project.ext.loadSign = true } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } } if ( project.ext.loadSign ) { Properties p = new Properties () p.load ( new FileInputStream ( rootProject.file ( 'keys/sign.properties' ) ) ) android.signingConfigs.release.storeFile file ( p.file ) android.signingConfigs.release.storePassword p.password android.signingConfigs.release.keyAlias p.alias android.signingConfigs.release.keyPassword p.keyPassword } 

我的要求是,没有密钥库的人应该能够正确地构build。 这是我能find的最干净的方式:

 android { signingConfigs { release //Filled in readSigningConfigIfAvailable() } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-xyz.txt' readSigningConfigIfAvailable() } } } private void readSigningConfigIfAvailable() { if (hasAllSigningProperties()) { android.signingConfigs.release.storeFile = file(keystore_path) android.signingConfigs.release.storePassword = keystore_password android.signingConfigs.release.keyAlias = key_alias android.signingConfigs.release.keyPassword = key_password android.buildTypes.release.signingConfig = android.signingConfigs.release } else { android.buildTypes.release.signingConfig = null } } private boolean hasAllSigningProperties() { (hasProperty('keystore_path') && hasProperty('keystore_password') && hasProperty('key_alias') && hasProperty('key_password')) }