我想有我的Gradle构建创建一个发布签名apk文件使用Gradle。
我不确定代码是否正确,或者我在做gradle构建时是否缺少一个参数?
这是build.gradle/build.gradle中的一些代码。节文件:
android {
...
signingConfigs {
release {
storeFile(file("release.keystore"))
storePassword("******")
keyAlias("******")
keyPassword("******")
}
}
}
Gradle构建成功完成,在我的build/apk文件夹中,我只看到…-release-unsigned.apk和…-debug-unaligned.apk文件。
对如何解决这个问题有什么建议吗?
现在几乎所有的平台都提供了某种密匙环,所以没有理由留下明文密码。
我提出了一个简单的解决方案,使用Python密匙环模块(主要是配套的控制台脚本密匙环)和Groovy ['do', 'something'].execute()特性的最小包装:
def execOutput= { args ->
def proc = args.execute()
proc.waitFor()
def stdout = proc.in.text
return stdout.trim()
}
使用这个函数,signingConfigs部分变成:
signingConfigs {
release {
storeFile file("android.keystore")
storePassword execOutput(["keyring", "get", "google-play", storeFile.name])
keyAlias "com.example.app"
keyPassword execOutput(["keyring", "get", "google-play", keyAlias])
}
}
在运行gradle assemblerrelease之前,你必须在你的keyring中设置密码,只有一次:
$ keyring set google-play android.keystore # will be prompted for the passwords
$ keyring set google-play com.example.app
释放快乐!
(回复user672009)
一个更简单的解决方案,如果你想让你的密码远离git存储库;但是,要包括您的构建。其中的Gradle,它甚至可以很好地处理产品口味,就是创建一个单独的Gradle文件。让我们称之为“签名”。Gradle '(包括它在你的。gitignore)。就像你的身材一样。Gradle文件减去所有与签名无关的东西。
android {
signingConfigs {
flavor1 {
storeFile file("..")
storePassword ".."
keyAlias ".."
keyPassword ".."
}
flavor2 {
storeFile file("..")
storePassword ".."
keyAlias ".."
keyPassword ".."
}
}
}
然后在你的构建中。Gradle文件包括下面的这一行“应用插件:'android'”
apply from: 'signing.gradle'
如果你没有或使用多种口味,将上面的“flavor1”重命名为“release”,你应该就完成了。如果你在使用香料,继续。
最后在构建中将您的flavor链接到正确的signingConfig。Gradle文件和你应该完成。
...
productFlavors {
flavor1 {
...
signingConfig signingConfigs.flavor1
}
flavor2 {
...
signingConfig signingConfigs.flavor2
}
}
...
扩展David Vavra的回答,创建一个文件~/.gradle/gradle。属性和添加
RELEASE_STORE_FILE=/path/to/.keystore
RELEASE_KEY_ALIAS=XXXXX
RELEASE_STORE_PASSWORD=XXXXXXXXX
RELEASE_KEY_PASSWORD=XXXXXXXXX
然后在build.gradle中
signingConfigs {
release {
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
// make this optional
if ( project.hasProperty("RELEASE_KEY_ALIAS") ) {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}