我添加了签名设置,the guide说。现在当我运行./gradlew assembleDebug
时,它需要我的密钥库和密钥密码,最后有两个APK文件:
所以Gradle构建了我的模块的调试版本,但需要释放密钥。
构建模块的build.gradle文件位于下方。
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
signingConfigs {
release {
storeFile file("my-release-key.keystore")
storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLine("Key password: ")
keyAlias "my_key"
}
}
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
}
}
}
dependencies {
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile project(':Log-Wrapper')
compile 'com.google.android.gms:play-services:+'
}
更新#1。
https://stackoverflow.com/a/24281294/1065835的解决方案有效,我接受了答案。但我个人更喜欢使用here描述的方法。发布密钥存储在本地且安全,每次编译发布版本时都无需键入密码。
答案 0 :(得分:3)
似乎我可以合并一些在这里和那里拾起的建议.. ..我得到了它。
问题似乎是在build.gradle中编写ANYWHERE这样的事实:
storePassword System.console().readLine("\nKeystore password: ")
它将在任何时候执行。
我放在一起的解决方案是,在buildTypes块之前创建一个signedCongif块:
signingConfigs {
release {
storeFile file("c://my.keystore")
storePassword "" // REQUIRED otherwise cannot be overwritten
keyAlias "myAlias"
keyPassword "" // REQUIRED otherwise cannot be overwritten
}
}
buildTypes {
[...]
用这个调整gradle配置:
gradle.taskGraph.whenReady { taskGraph ->
if(taskGraph.hasTask(assembleRelease) || taskGraph.hasTask(installRelease)) {
// Only execute when we are trying to assemble a release build
def passKeystore = System.console().readLine("\nKeystore password: ")
def passKey = System.console().readLine("\nKey password: ")
android.signingConfigs.release.storePassword = passKeystore
android.signingConfigs.release.keyPassword = passKey
}
}
请注意:
1.这个区块位于“android {}”之外
2.这仅在COMMAND LINE执行中进行了测试。似乎在没有可用的控制台的情况下需要一些修复。
答案 1 :(得分:0)
好像只有3个选项:
这是我的解决方法,也是实现完美平衡的第四个选择:
apply plugin: 'com.android.application'
gradle.taskGraph.whenReady { taskGraph ->
if(taskGraph.hasTask(':app:assembleRelease')) {
android.signingConfigs.release.storeFile = file(KEYSTORE)
android.signingConfigs.release.storePassword = STOREPASS
android.signingConfigs.release.keyAlias = KEY_ALIAS
android.signingConfigs.release.keyPassword = KEYPASS
}
}
android {
...
defaultConfig {
...
}
signingConfigs {
debug {
}
release {
}
}
buildTypes {
debug {
...
}
release {
...
//signingConfig signingConfigs.release
}
}
}
这允许您仅在发布版本
上使用存储的密钥和签名