Android gradle - 如何远程访问密钥库

时间:2016-12-27 02:43:05

标签: android gradle android-gradle android-keystore

我有一个脚本来远程获取属性文件。在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上才能在构建时检索它们。

2 个答案:

答案 0 :(得分:0)

您的关闭只需要避免URI而是将绝对路径直接传递给File构造函数,然后使用Gradle的File sugar方法withInputStream来加载{ {1}}

Properties

答案 1 :(得分:0)

一个老问题,但是我遇到了与OP相同的问题,该线程使我走上了正确的道路,所以我认为我可以发布对我有用的东西。

我的密钥库文件位于本地网络上的文件服务器上,我尝试了OP尝试的方法。对我有用的是只删除storeFile路径上的几个破折号和撇号。在我的keystore.properties文件中

this