我想将我的密钥库保存在项目目录之外。我不想在存储库中存储文件路径,因此我将值委托给~/.gradle/gradle.properties
中的相应gradle变量
我无法接受以下绝对路径:
/Users/username/.gradle/keystores/project/release.key
要么
~/.gradle/keystores/project/release.key
我试过了:
storeFile file(RELEASE_STORE_FILE)
和
storeFile new File(RELEASE_STORE_FILE)
如何通过RELEASE_STORE_FILE
变量将绝对路径值传递给密钥库文件?
android {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASS
keyAlias RELEASE_ALIAS
keyPassword RELEASE_KEY_PASS
}
}
}
和~/.gradle/gradle.properties
文件:
RELEASE_STORE_FILE=/Users/username/.gradle/keystores/project/release.key
RELEASE_STORE_PASS=******
RELEASE_ALIAS=******
RELEASE_KEY_PASS=******
简而言之:我想将绝对路径值传递给gradle。
答案 0 :(得分:2)
我使用符号链接
解决了这个问题在app模块中创建符号链接keystore.lnk
ln -s [path-to-keystore] keystore.lnk
然后在gradle.properties
<script>
document.body.onload = function() {updateurl()};
function updateurl(){
window.history.replaceState(window.location.hostname, "Sample Title", window.location.pathname);
}
</script>
RELEASE_STORE_FILE = keystore.lnk(不要使用引号)
现在您的gradle说明将有效。
答案 1 :(得分:1)
我最终使用了来自this网站的有趣解决方案。
我们的想法是将变量保存在存储在远程存储库的单独文件夹中。
在~/.gradle/gradle.properties
文件中输入:
Keys.repo=/Users/username/.signing
其中Keys.repo
是远程存储库的本地路径。
稍后在/Users/username/.signing/YourProjectName.properties
你有:
RELEASE_STORE_FILE=/YourProjectName/release.keystore //in fact it's a relative path
RELEASE_STORE_PASS=xxxxx
RELEASE_ALIAS=xxxxx
RELEASE_KEY_PASS=xxxxx
您需要将release.keystore
文件存储在/Users/username/.signing/YourProjectName/release.keystore
路径
配置按以下方式使用:
android {
signingConfigs {
debug { /* no changes - usual config style */ }
release {
if (project.hasProperty("Keys.repo")) {
def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties")
if (projectPropsFile.exists()) {
Properties props = new Properties()
props.load(new FileInputStream(projectPropsFile))
storeFile file(file(project.property("Keys.repo") + props['RELEASE_STORE_FILE']))
storePassword props['RELEASE_STORE_PASS']
keyAlias props['RELEASE_ALIAS']
keyPassword props['RELEASE_KEY_PASS']
}
} else {
println "======================================================="
println "[ERROR] - Please configure release-compilation environment - e.g. in ~/.signing directory"
println "======================================================="
}
}
}
}
答案 2 :(得分:0)
在那里找到解决方案:https://gist.github.com/gabrielemariotti/6856974
简而言之,您应该正确解析包含密钥库路径的文件。使用下一行修改您的模块的gradle。首先,这是如何基于keystore.properties文件内容创建signingConfigs:
signingConfigs
{
release
{
def Properties props = new Properties()
def propFile = new File('path/to/your/keystore.properties') //absolute path to keystore.properties
if (propFile.canRead())
{
props.load(new FileInputStream(propFile))
if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD'))
{
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
}
else
{
println 'keystore.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
}
else
{
println 'keystore.properties not found'
android.buildTypes.release.signingConfig = null
}
}
}
然后将signingConfig添加到您的发布版本buildType:
buildTypes
{
...
release
{
...
signingConfig signingConfigs.release
}
}
此解决方案的keystore.properties文件示例:
STORE_FILE=absolute//path//to//store
STORE_PASSWORD=yourPass
KEY_PASSWORD=keysPass
KEY_ALIAS=aliasName
这对我有用(Android Studio 3.0.1,Gradle 4.1,Windows 10)。
答案 3 :(得分:0)
在我的例子 (macOS) 中,我的 local_store.keystore
保存在 Users/<username>
中,并且在 gradle.properties
文件中配置的密钥库路径为:
RELEASE_STORE_FILE=Users/<username>/local_store.keystore
我收到以下错误:
> Keystore file
'/Users/<username>/Documents/MyProject/android/app/Users/<username>/local_store.keystore'
not found for signing config 'release'.
所以 gradle.properties
中设置的路径被添加到 build.gradle
文件的相对路径中(注意重复 /Users/<username>
)。
我通过使用几个 ../
指定密钥库的路径来指向 Users/<username>
文件夹中的正确位置来解决这个问题。
它在 gradle.properties
文件中的外观:
RELEASE_STORE_FILE=../../../../../local_store.keystore
无需修改 build.gradle
文件。