【问题标题】:Proper way to use System environment variables in gradle using Android Studio使用Android Studio在gradle中使用系统环境变量的正确方法
【发布时间】:2014-10-24 16:36:13
【问题描述】:

我正在使用 Android Studio 在 Ubuntu 14.04 系统上构建我的项目。

我在 build.gradle 文件中编写了以下内容,以避免在我的 git 存储库中对 storeFile、storePassword、keyAlias 和 keyPassword 进行硬编码:

signingConfigs {
 debug {

    storeFile file(System.getenv("KEYSTORE"))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

但 gradle 同步错误如下:Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

我的 .bashrc 包含:source ~/.gradlerc 而我的 ~/.gradlerc 包含以下内容:

export KEYSTORE="/home/myname/keystore/mykey"
export KEYSTORE_PASSWORD='mypass'
export KEY_ALIAS='mykey'
export KEY_PASSWORD='keypass'

我已确认 shell 正确导入了这些变量。但是我不确定为什么 Android Studio 中的构建环境没有收到它。

在 gradle 中使用环境变量的正确方法是什么?

【问题讨论】:

标签: android gradle android-studio android-gradle-plugin


【解决方案1】:

我也喜欢在我的环境变量中包含我的密钥库信息,而不是在项目中包含它。您的代码看起来不错,但我在文件路径上遇到了同样的问题。我通过将该值转换为字符串然后将其传递给file() 来解决它:

signingConfigs {
 debug {
    storeFile file(String.valueOf(System.getenv("KEYSTORE")))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

【讨论】:

  • 你摇滚!这是我在 build.gradle 和使用 android studio 中发现的环境变量问题的最简单的解决方案
  • 添加上述修复后,现在我有 Android Studio 抱怨调试 apk 未签名。 “错误:您当前选择的变体 (..apk) 的 apk 未签名。请为此变体指定签名配置)。它带我进入运行/调试配置窗口。构建错误消失了,但现在,我由于此错误,无法从 Android Studio 运行应用程序。
  • @SayoojValsan 对于示例显示的debug 签名配置,您可能不一定想要/需要这个,Gradle 通常带有正确配置的默认调试密钥库,您应该将debug 换成release 的示例,然后您只需要在构建发布时提供环境变量即可转到 Play 商店。
  • 这在本地工作得很好,但是我们在一个 CI 管道中遇到了一些问题,Gradle 试图将绝对路径解析为相对路径,我们从未完全解决它,但使用类似 storeFilePath String.valueOf(System.getenv("KEYSTORE")); storeFile file(storeFilePath).absolutePath可能已经解决了。
  • 很好的答案,完美!但是有人能弄清楚为什么我们需要 String.valueOf() 吗?方法 getenv() 返回 Strung。
【解决方案2】:

在您的源文件夹中创建一个gradle.properties 文件(与build.gradle 一起)以仅应用于当前项目或在~/.gradle/gradle.properties 中将内容应用于系统范围:

keystore=/home/myname/keystore/mykey
keystore_password=mypass
key_alias=mykey
key_password=keypass

现在更新您的 build.gradle 文件:

debug {
  storeFile file("${keystore}")
  storePassword "${keystore_password}"
  keyAlias "${key_alias}"
  keyPassword "${key_password}"
}

或者,您可以使用-P 选项从命令行传递参数。例如,./gradlew assemble -Pkey_password=keypass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2020-05-29
    • 2018-12-15
    • 2014-04-13
    • 1970-01-01
    • 2020-12-27
    • 2014-11-06
    相关资源
    最近更新 更多