我想有我的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文件。
对如何解决这个问题有什么建议吗?
这是解决同一问题的另一种方法。由于不建议在源代码中存储任何类型的凭据,我们决定在一个单独的属性文件中设置密钥存储和密钥别名的密码,如下所示:
key.store.password=[STORE PASSWORD]
key.alias.password=[KEY PASSWORD]
如果使用git,可以创建一个名为secure.properties的文本文件。您应该确保从存储库中排除它(如果使用git,则将其添加到.gitignore文件中)。然后,您需要创建一个签名配置,就像其他一些答案所指出的那样。唯一的区别是如何加载凭据:
android {
...
signingConfigs {
...
release {
storeFile file('[PATH TO]/your_keystore_file.jks')
keyAlias "your_key_alias"
File propsFile = file("[PATH TO]/secure.properties");
if (propsFile.exists()) {
Properties props = new Properties();
props.load(new FileInputStream(propsFile))
storePassword props.getProperty('key.store.password')
keyPassword props.getProperty('key.alias.password')
}
}
...
}
buildTypes {
...
release {
signingConfig signingConfigs.release
runProguard true
proguardFile file('proguard-rules.txt')
}
...
}
}
永远不要忘记手动将signingConfig分配给发行版构建类型(出于某些原因,我有时假设它将被自动使用)。此外,启用proguard并不是强制性的,但建议这样做。
与使用环境变量或请求用户输入相比,我们更喜欢这种方法,因为它可以从IDE中完成,通过切换到release构建类型并运行应用程序,而不必使用命令行。
(回复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
}
}
...