我有一个脚本来远程获取属性文件。在props文件里面是android的私钥的密码和别名。 props文件还包含私钥的路径,该私钥也是远程的。这是我到目前为止的脚本:
keystore.properties 文件如下所示;
storePassword="pass"
keyPassword="pass"
keyAlias="na"
storeFile="file:////Users/myuserName/Documents/StudioProjects/private-key-vault/mykeystore"
以下是实际进行签名的gradle脚本:
def propertiesFileLocation = 'file:///Users/myuserName/Documents/StudioProjects/private-key-vault/props/keystore.properties'
def propFileURL = new URL(propertiesFileLocation);
def propsFile = new File(propFileURL.toURI());
def configName = 'config'
if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {
def props = new Properties()
props.load(new FileInputStream(propsFile))
println 'The props are:'+ props
android.signingConfigs[configName].storeFile = file(props['storeFile'])
android.signingConfigs[configName].storePassword = props['storePassword']
android.signingConfigs[configName].keyAlias = props['keyAlias']
android.signingConfigs[configName].keyPassword = props['keyPassword']
}
}
}
注意我正在打印属性,我注意到密钥库路径不是绝对的。 Gradle假设密钥库位于根项目目录中,我似乎无法更改它。这是输出:
The props are:
[storeFile:"file:////Users/myuserName/Documents/StudioProjects/private-key-vault/mykeystore", keyAlias:"na", keyPassword:"pass", storePassword:"pass"]
这是好的,直到我运行构建并看到路径现在不是绝对的:
当我运行./gradlew assembleFreeRelease
时,我当然得到以下错误:
:app:validateSigningFreeRelease FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:validateSigningFreeRelease'.
> Keystore file /Users/myuserName/Documents/StudioProjects/myapp/app/"file:/Users/myuserName/Documents/StudioProjects/private-key-vault/mykeystore" not found for signing config 'config'.
注意根项目路径是如何附加到密钥库路径的?所以它找不到它。我怎样才能解决这个问题。
关于我想要做的事情:我想将密钥库和密钥库属性远程存储在一个安全的区域,并且只有在VPN上才能在构建时检索它们。
答案 0 :(得分:0)
您的关闭只需要避免URI
而是将绝对路径直接传递给File
构造函数,然后使用Gradle的File sugar方法withInputStream
来加载{ {1}}
Properties
答案 1 :(得分:0)
一个老问题,但是我遇到了与OP相同的问题,该线程使我走上了正确的道路,所以我认为我可以发布对我有用的东西。
我的密钥库文件位于本地网络上的文件服务器上,我尝试了OP尝试的方法。对我有用的是只删除storeFile路径上的几个破折号和撇号。在我的keystore.properties文件中
this